2013-04-16 14 views
5

Szukam utworzenia bazy danych czasowych Cassandra do przechowywania milionów serii dziennych danych, które potencjalnie mogą mieć łącznie do 100B punktów danych.Projektowanie bazy danych czasu w Cassandra

Spojrzałem w tym artykule: http://rubyscale.com/blog/2011/03/06/basic-time-series-with-cassandra/

Ten projekt jest bardzo dobra. Zasadniczo mogę umieścić dzienne znaczniki czasu w kolumnach, aw razie potrzeby wyodrębnić kolumny, dodając dzień do wiersza.

dwa pytania mam:

  • Patrzę na zapisanie do 20.000 o czasie, (dzienne) kolumn. Czy trzeba nawet odrywać rzędy np. rok z taką ilością kolumn? Czy istnieje korzyść/wada polegająca na odrzucaniu wierszy w celu zmniejszenia liczby kolumn do 365 w ciągu roku.
  • Inną ideą, którą mam, jest raczej niż dzielenie kolumn według wierszy, aby utworzyć rodzinę kolumn na każdy rok. W ten sposób podczas uzyskiwania dostępu do danych z wielu lat musiałbym zapytać wiele rodzin kolumn, a nie jedną rodzinę kolumn i dołączyć wyniki po stronie klienta. Czy takie podejście przyspieszy lub spowolni wszystko?

Odpowiedz

4

Jeśli zamierzasz zarządzać ogromnymi ilościami pisań, masz jeden problem z podejściem.

Zapisanie zawsze do 1 przycisku oznacza, że ​​wszystkie zapisy dla tego klucza zostaną przesłane do jednego węzła. Zasadniczo będziesz używać jednego węzła dziennie z klastra, więc równie dobrze możesz mieć jedną wielką instancję Cassandry, niż zawracać sobie głowę konfigurowaniem klastra. Jeśli twoja częstotliwość zapisu jest naprawdę wysoka, możesz obniżyć węzły odpowiedzialne za ten dzień/klucz.

Moja rada polega na przepakowywaniu jednego dnia w wielu wierszach, które są używane jednocześnie. Czas może być niebezpieczny, ponieważ nagły wzrost podczas jednego z nich może doprowadzić do upadku.

można utworzyć klucz wiadro (wiersz) tak:

  • [ROW_BASE_NAME] + [DZIEŃ] + someHashFunction (timestamp)% 10
  • [ROW_BASE_NAME] + [DZIEŃ] + random.nextInt (10)
  • [ROW_BASE_NAME] + [DZIEŃ] + nextbucket < --- czyli jeśli masz bezpieczny sposób, aby obrócić wiadro sobie

Istnieje wiele sposobów, aby to zrobić. Możesz również użyć jakiegoś elementu zapisanej kolumny, aby to zrobić. Myślę jednak, że powinno to być ważne, aby cały czas wykorzystywać cały zespół kassandra.

Moja odpowiedź jest ważna tylko w przypadku pisania ciężkich aplikacji/funkcji, ponieważ będziesz musiał użyć multi_get (wiele kluczy czyta cały wiersz), aby odczytać wszystkie dane i odtworzyć całą linię czasu dla tego dnia.

+0

Więc myślisz, że nie ma punktów w dzieleniu tabel/rodzin kolumn na oddzielne rodziny kolumn, ale raczej w wierszach? Czy jest jakaś wada polegająca na posiadaniu zbyt wielu rzędów w rodzinie z jedną kolumną? – datageek

+2

Rodzina kolumn to tylko dodatkowy poziom klucza.Jeśli moje dane mają ten sam charakter i wymagają tych samych ustawień w zakresie buforowania, porównywania (nazwy kolumn) itp. Następnie umieszczam je w tej samej rodzinie kolumn. Plus rodziny kolumn nie są tak łatwe do zarządzania programaktycznie. Podczas pisania do nowego klucza zostanie utworzony. I nie można odczytać z oddzielnych CF w jednym zapytaniu. –

1

Powinieneś również przeczytać ten artykuł pod adresem Advanced Time Series with Cassandra.

+0

Widziałem to dzięki, w rzeczywistości nie lubię tego rozwiązania z zaawansowanego artykułu z serii czasowej. Jeśli zrozumiałem, to wymaga umieszczenia danych jako Json? – datageek

Powiązane problemy