obecnie działamy na granicy zasobów dzięki naszemu rozwiązaniu opartemu na serwerze mssql.
Mamy teraz wiele tradycyjnych opcji dotyczących następnego ruchu, aby poradzić sobie z obciążeniem:
- kupuj szybsze procesory i IO
- podzielić niektórych klientów na oddzielny serwer
- przenieś db do klastra
Wszystkie są albo drogie pod względem licencjonowania i sprzętu, albo czasu. Chcę więc dodać kolejną opcję, przenosząc cały system do skalowalnego rozwiązania, które obiecuje silnik nosql Cassandra.
Nie jestem jednak pewien i nie mam doświadczenia z bazami danych noSQL, dlatego muszę zrozumieć strukturę „nieustrukturyzowanych” danych.
W naszej aplikacji przechowujemy dane wprowadzane przez użytkowników na różne sposoby jako listy „klucz-wartość”. Istnieje tabela nadrzędna, która zawiera element head (jak Order), oraz tabela podrzędna z parami klucz-wartość zawierającymi zawartość zamówienia (jak Order_Lines).
Pod względem biznesowym Zamówienia i Linie Zamówienia są jednostką. Ale ze względu na RDBMS są one przechowywane w tabelach i muszą być przez cały czas łączone.
Podczas operacji czasami wybieramy ładowanie tylko górnej części, ale przez większość czasu ładujemy wiersz główny + niektóre KVP, aby wyświetlić przydatne informacje.
Na przykład na liście przeglądowej pokazujemy identyfikator nagłówka + niektóre wartości w kolumnach dla każdego wiersza.
AKTUALIZACJA: Przechowujemy wszelkiego rodzaju formularze. Zasadniczo przechowujemy „dokumenty”. Niemniej jednak musimy przygotować i przeszukiwać te formularze według dowolnej wartości, sortować itp. Kontrola dostępu do danych dodaje kolejną warstwę współzależności do bazy danych.
Jak można się domyślić, ilość i dostępność niektórych KVP różni się w zależności od obiektu. Nie ma uzasadnionej możliwości utworzenia pojedynczych tabel dla każdego rodzaju obiektu, ponieważ musielibyśmy utworzyć tysiące tabel dla różnych kombinacji danych.
Czy tego rodzaju „słownikowe” zbiory danych lepiej przechowywać w bazie danych noSQL? Czy z tego skorzystamy na wydajności? Czy Cassandra modelowałaby te głowy i KVP jako jeden zestaw danych? Patrząc na stronę Cassandra i niektóre samouczki, mam wrażenie, że nie ma tak dużej różnicy między naszym RDBMS a Cassandrą pod względem organizacji danych - pozostawiając nam tyle samo złączeń, jeśli chcesz wybrać 5 KVP dla listy dla każdego wiersza.
Oświecenie jest mile widziane, również wskaźniki do dokumentów wyjaśniających problemy są w porządku.