To naprawdę zależy od zestawów danych. Zasada numer jeden dla projektu NoSQL polega na zdefiniowaniu najpierw scenariuszy zapytań. Gdy naprawdę zrozumiesz, w jaki sposób chcesz wysyłać zapytania do danych, możesz zapoznać się z różnymi rozwiązaniami NoSQL. Domyślną jednostką dystrybucji jest klucz. Dlatego musisz pamiętać, że musisz mieć możliwość dzielenia danych między komputerami węzłów, w przeciwnym razie skończysz z horyzontalnie skalowalnym systemem, w którym wszystkie prace będą nadal wykonywane w jednym węźle (aczkolwiek lepsze będą zapytania zależne od przypadku).
Musisz także przemyśleć twierdzenie CAP, większość baz danych NoSQL jest ostatecznie zgodna (CP lub AP), podczas gdy tradycyjne Relacyjne DBMS to CA. Wpłynie to na sposób przetwarzania danych i tworzenia pewnych rzeczy, na przykład generowanie kluczy może być oszustwem.
Pamiętaj również, że w niektórych systemach, takich jak HBase, nie ma koncepcji indeksowania. Wszystkie twoje indeksy będą musiały zostać zbudowane według logiki aplikacji, a wszelkie aktualizacje i usuwanie będą musiały być zarządzane jako takie. Dzięki Mongo możesz tworzyć indeksy na polach i stosunkowo szybko je wyszukiwać, istnieje również możliwość integracji Solr z Mongo. Nie musisz pytać o identyfikator w Mongo, tak jak w HBase, która jest rodziną kolumn (inaczej baza danych Google BigTable), w której zasadniczo masz zagnieżdżone pary klucz-wartość.
Po raz kolejny dochodzimy do danych użytkownika, tego, co chcemy przechowywać, sposobu jego przechowywania i, co najważniejsze, sposobu uzyskania do niego dostępu. Projekt Lily wygląda obiecująco. W pracy, z którą się angażuję, pobieramy dużą ilość danych z sieci i przechowujemy ją, analizujemy, usuwamy, analizujemy, przesyłamy, aktualizujemy itp. Nie używamy tylko jednego systemu, ale wielu które najlepiej pasują do wykonywanej pracy. Do tego procesu używamy różnych systemów na różnych etapach, ponieważ daje nam szybki dostęp tam, gdzie jest potrzebny, zapewnia możliwość przesyłania strumieniowego i analizowania danych w czasie rzeczywistym i co ważne, śledzenie wszystkiego w trakcie naszej podróży (jak utrata danych w prod. system to wielka sprawa). Używam Hadoop, HBase, Hive, MongoDB, Solr, MySQL, a nawet dobrych starych plików tekstowych. Pamiętaj, że do produkcji systemu wykorzystującego te technologie jest nieco trudniej niż instalacja MySQL na serwerze, niektóre wydania nie są tak stabilne i naprawdę musisz najpierw wykonać test. Pod koniec dnia zależy to od poziomu oporu biznesowego i krytycznego charakteru systemu.
Inna ścieżka, o której nikt dotąd nie wspomniał, to NewSQL - czyli skalowalne poziomowo RDBMS ... Jest kilka takich, jak klaster MySQL (jak sądzę) i VoltDB, które mogą odpowiadać twojej sprawie.
Znów dochodzi do zrozumienia danych i wzorców dostępu, systemy NoSQL są również niezwiązane, tzn. Nie są relacyjne i mają lepsze dopasowanie do nierelacyjnych zestawów danych. Jeśli twoje dane są z natury relacyjne i potrzebujesz pewnych funkcji zapytań SQL, które naprawdę muszą robić takie rzeczy jak produkty kartezjańskie (również łączenia), być może lepiej będzie trzymać się Oracle i zainwestować trochę czasu w indeksowanie, dzielenie i dostrajanie wydajności.
Moja rada brzmiałaby tak, że można grać z kilkoma różnymi systemami.Jednak dla twojego przypadku użycia wydaje mi się, że najlepszym rozwiązaniem jest baza danych Family Column, myślę, że jest kilka miejsc, w których zaimplementowano podobne rozwiązania do bardzo podobnych problemów (myślę, że NYTimes używa HBase do monitorowania kliknięć strony użytkownika). Kolejnym świetnym przykładem jest Facebook i podobni, używają do tego HBase. Tutaj jest naprawdę dobry artykuł, który może ci pomóc po drodze i wyjaśnić kilka punktów powyżej. http://highscalability.com/blog/2011/3/22/facebooks-new-realtime-analytics-system-hbase-to-process-20.html
Ostatnim punktem byłoby to, że systemy NoSQL nie są wszystkim i kończą wszystko. Umieszczenie danych w bazie danych NoSQL nie oznacza, że będzie działać lepiej niż MySQL, Oracle, a nawet plików tekstowych ... Na przykład zobacz ten wpis na blogu: http://mysqldba.blogspot.com/2010/03/cassandra-is-my-nosql-solution-but.html
Chciałbym rzucić okiem na;
MongoDB - Dokument - CP
CouchDB - Dokument - AP
Redis - w pamięci klucza wartością (nie kolumna rodzin) - CP
Cassandro - Rodzina kolumn - dostępna & Partition Tolerant (AP)
HBase - kolumna Family - Konsekwentne & Partition tolerancyjny (CP)
Hadoop/Hive - Mają również spojrzeć na Hadoop streamingu ...
Hypertable - Kolejny CF CP DB.
VoltDB - Produkt naprawdę dobrze wyglądający, baza relacji, która jest rozprowadzana i może działać w twoim przypadku (może być łatwiejszy ruch). Wydają się również zapewniać wsparcie dla przedsiębiorstw, które może być bardziej odpowiednie dla prod env (tj. Zapewniać użytkownikom biznesowym poczucie bezpieczeństwa).
Jakikolwiek sposób to jest mój 2c. Zabawa z systemami to jedyny sposób, aby dowiedzieć się, co naprawdę działa w twoim przypadku.
Jak wyglądają twoje dane? – NightWolf
1.) Czy istnieje raczej kilkaset rekordów na użytkownika, czy też każdy użytkownik ma tylko kilka? 2.) Czy większość zapytań zawiera warunek user_id? 3.) Czy statystyki w całym zestawie czasowym są krytyczne? (prawdopodobnie nic nie zobaczy użytkownik) 4.) Czy potrzebujesz sortowania wyników (np. alfabetycznie według kraju)? Tak czy inaczej, powinieneś wypróbować nadchodzący [ArangoDB v2.6] (http://arangodb.org/)! – CoDEmanX