NoSQL jest bardziej ewolucyjny niż rewolucyjny. Zasadniczo łączy istniejące idee „zewnętrznego przechowywania danych” z „korzystaniem ze znanych struktur danych, a nie tabel relacyjnych”.
Istnieje więcej rodzajów baz danych niż relacyjne, na przykład hierarchiczne bazy danych . Choć archaiczny według dzisiejszych standardów, bardzo dobrze zazębiał się ze strukturami danych swoich danych (np. Rekordy COBOL ). Chodzi o to, że dane w bazie danych zostały dokładnie modelowane do tego, jak zostały utworzone rekordy w językach programowania, które ich używały.
Szybko przejdź do wynalezienia relacyjnych baz danych , w których baza danych ostatecznie rozdzieliła obawy i, przy odpowiedniej normalizacji, jest doskonałym sposobem na wizualizację większości typów danych i relacji między danymi. Jest naprawdę łatwy do zrozumienia w porównaniu z innymi typami baz danych. Tym, co kompletnie zawodzi, jest jednak przechowywanie danych w sposób, który odzwierciedla obiekty i klasy w programie. Stąd wynalazek mapowania obiektowo-relacyjnego . Innymi słowy, projekt bazy danych jest w rzeczywistości przeszkodą w projektowaniu programu, który z niej korzysta, dlatego potrzebujemy bibliotek ORM, takich jak Hibernacja. Choć czyste i konsekwentne, zawsze mam w głowie tę wątpliwą wątpliwość, że coś nie jest w porządku.
Doprowadziło to do powstania jeszcze dwóch rodzajów baz danych, baz danych obiektów i NoSQL .
Obie próbują rozwiązać problemy wprowadzone przez relacyjne bazy danych, nie narażając nas jednak na przerażające horrory hierarchicznych baz danych. Dane są nadal przechowywane w repozytoriach, które niejasno przypominają tabele, ale w rzeczywistości bardziej przypominają programowanie struktur danych niż tabele relacyjne. Podczas gdy obiektowe bazy danych przestrzegają głównie dobrze zdefiniowanych reguł, rozumiem, że NoSQL jest raczej arbitralny. Na przykład tabela może być wizualizowana jako tabela mieszająca lub tablica. Nie ma łatwego, dobrze zdefiniowanego sposobu na ich zapytanie za pomocą dowolnego narzędzia analogicznego do Oracle SQL Developer lub SQL Server Management Studio .
Chodzi o to, że można zdefiniować struktury danych, które można łatwo przeszukiwać w kodzie, zamiast składać zapytania SQL, które lepiej pasują do silnika bazy danych SQL, niż wyrażać pożądane przez siebie zapytanie. Na przykład dopasowania rozmyte lub częściowe są trudniejsze i działają gorzej w relacyjnej bazie danych, podczas gdy baza danych NoSQL może mieć strukturę zoptymalizowaną do takiego wyszukiwania i kończy się w ułamku czasu.
Istnieją języki do wysyłania zapytań do NoSQL. Nie ma jednak uniwersalnego języka, takiego jak SQL dla relacyjnych baz danych.
Późna edycja:
Chociaż jestem wystarczająco zaznajomiony z bazami danych NoSQL, to pytanie było dla mnie impulsem do zakupu wysokiej jakości książki na ten temat i do przeczytania jej z ostatecznym celem bycia prawdziwym ekspertem w tej dziedzinie. Pozostałe komentarze są oparte na NoSQL destylowanej: krótki przewodnik po Emerging World of Polyglot Trwałość przez Pramod Sadalage i Martin Fowler .
Autorzy twierdzą, że relacyjne bazy danych nie skalują się dobrze do klastrów zdolnych do obsługi danych potrzebnych dla witryn takich jak Amazon i Google: NoSQL został opracowany, aby pasować do tej niszy, rozluźniając współbieżność i trwałość w ACID w celu obsługi dużej liczby zapytań, które w dużej mierze wykorzystują dane statyczne (stąd transakcje ACID nie są tak ważne).
Ponadto zakładają, że bazy danych NoSQL działają bez schematu (strona 10), który pozwala bazom danych NoSQL na łatwiejszą modyfikację struktury danych. Nie jestem pewien, czy obecność lub brak formalnego schematu ma w tym względzie znaczenie, ponieważ bazy danych SQL pozwalają również modyfikować schematy. Niezależnie od tego dwaj uznani autorzy przedstawiają to twierdzenie, dlatego warto je przeanalizować.
Wierzę, że oba te główne punkty służą jedynie do egzekwowania mojego głównego punktu, że NoSQL jest ewolucyjny, a nie rewolucyjny. Nadal przechowują dane i dokonują stopniowych ulepszeń skali i możliwości modyfikacji. Wskazują również, że NoSQL nie dąży do uzurpacji relacyjnych baz danych jako króla przechowywania danych, a jedynie do zapewnienia alternatywnych sposobów przechowywania danych dla typów danych, które muszą być skalowane i przekształcane w sposób (ich zdaniem) relacyjny bazy danych nie obsługują wystarczająco dobrze.