2012-01-09 12 views
8

Próbowałem utworzyć użytkowników do moich testów. Stworzyłem użytkowników w pętli od 0..100000 przy użyciu klejnotu cassandra-cql dla Ruby on Rails, a następnie policzyłem użytkowników w mojej bazie danych i było tylko 10000 użytkowników. Jeśli utworzę 9000, wszystko działa dobrze. Najpierw myślałem, że użytkownicy nie istnieją, ale użyłem Apollo WebUI dla Cassandry i mogłem znaleźć użytkownika o identyfikatorze 100000 i użytkowników poniżej. Dlaczego to się dzieje?Niepoprawna liczba (*) z cassandra-cql

Wiem, że powinienem użyć kolumny licznika, aby podać liczbę użytkowników w mojej aplikacji, ale chcę wiedzieć, czy to błąd, czy moja.

def self.create_users 
    (0..19000).each do |f| 
    @@db.execute("INSERT INTO users (uid, first_name, last_name, email) VALUES (?,?,?,?)", f.to_s, "first_name", "last_name", "email") 
    end 
end 

def self.count_users 
    count = @@db.execute("SELECT count(*) FROM users") 
    count.fetch do |c| 
    return c[0] 
    end 
end 

Odpowiedz

23

Operacje CQL ograniczają zarówno liczbę wierszy, jak i liczbę kolumn, które zostaną zwrócone użytkownikowi. Domyślnie ten limit to 10 000. Ponieważ operacja count (*) musi pobrać wszystkie wiersze, aby uzyskać liczbę, jest również ograniczona domyślnie 10.000 wierszy. Można zwiększyć limit dla zapytania (choć nie jest to zalecane):

SELECT count(*) FROM users limit 20000; 

pamiętać, że jest kosztowna operacja szczególnie gdy masz dużo wierszy. Należy przewidywać, że tego rodzaju zapytanie może zająć dużo czasu dla każdego zestawu danych o średnim lub dużym rozmiarze. Jeśli to możliwe, należy denormalizować tę liczbę do licznika lub innej formy, która nie będzie wymagać pobierania wszystkich wierszy z rodziny kolumn.

+1

dzięki za to! – user934801

+0

Witam, czy mogę po prostu zapytać, jakiej wersji używasz Kasandra? Mam do czynienia z pokrewnym problemem z 'select count (*)', a 'limit' jest całkowicie ignorowany: http://stackoverflow.com/questions/36174805/cassandra-cql-select-count-with-limit – light

+0

Pytanie pochodziło ze stycznia 2012 roku, więc najprawdopodobniej było to Cassandra 1.0.X. Od tego czasu CQL został poddany przeglądowi i ma teraz zupełnie inną semantykę. – psanford

Powiązane problemy