Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: SQL vs NoSQL różnice.
Forum PHP.pl > Forum > Bazy danych
NickOver
Cześć smile.gif

Chciałbym się was zapytać o różnice między bazami SQL a noSQL. Trochę poczytałem i mam już wiedzę teoretyczną, jednak interesują mnie praktyczne informacje. Tz. różnice w szybkości czego nie należy robić na którejś z baz (i dlaczego).

Liczę na ciekawą dyskusje, dużo informacji i pozdrawiam smile.gif
Pyton_000
Podziel się jakimiś ciekawymi materiałami o NSQL jak masz coś, chętnie człowiek poczyta coś do poduszki haha.gif
by_ikar
Zależy w przypadku jakiej bazy jest porównanie. Przykładowo w mongo podoba mi się to, że mogę tworzyć pola (kolumny) które zawierają inny obiekt (json) lub zawierają tablice. Potem po takiej tablicy mogę wyszukiwać, mogę to agregować, grupować etc. Ale są i tego minusy, różnego rodzaju joiny to jest lekki problem w takim mongo, w porównaniu do mysqla. Odpowiednio zaprojektowana baza rozwiązuje taki problem, ale trzeba się przestawić. Ale np taki redis, który też jest swego rodzaju nosqlem, nie ma IMO sobie równych. Całkiem niedawno jeszcze dodali eventy, dzięki czemu możesz nasłuchiwać przykładowo na eventach które są wyzwalane kiedy rekord któremu ustawiłeś czas życia zostanie sflushowany i odpowiednio na to reagować.

Są zalety i są wady. Ostatnio dużo pracuje na mongo i podoba mi się ta nie płaska struktura.
mmmmmmm
@by_ikar
Te typy to postgreSQL ma już chyba od dawna. JSON od wersji 9.2, czyli od wrzesnia 2012.
Crozin
Dosyć stary, ale wartościowy artykuł: http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis
by_ikar
Cytat(mmmmmmm @ 3.02.2015, 08:52:29 ) *
@by_ikar
Te typy to postgreSQL ma już chyba od dawna. JSON od wersji 9.2, czyli od wrzesnia 2012.


A mogę po takim jsonie wyszukiwać ? Mogę go agregować, grupować itp ? Albo czy mogę założyć indeksy na jakieś pole w tym jsonie?
mmmmmmm
@by_ikar:
  1. /* funkcje pomocnicze */
  2. CREATE FUNCTION json(text, text) RETURNS json AS
  3. $$
  4. SELECT ('{"' || $1 || '":"' || $2 ||'"}')::JSON
  5. $$
  6. LANGUAGE sql IMMUTABLE STRICT
  7. COST 1;
  8.  
  9. CREATE FUNCTION json_add(json, json) returns json AS
  10. $$
  11.  
  12. SELECT ('{' || string_agg(to_json("key") || ':' || "value", ',') || '}')::json
  13. FROM
  14. (
  15. SELECT KEY, value::TEXT FROM json_each($1)
  16. UNION
  17. SELECT KEY, value::TEXT FROM json_each($2)
  18. ORDER BY KEY
  19. )sub
  20. $$
  21. LANGUAGE sql IMMUTABLE STRICT
  22. COST 1;
  23.  
  24. /* tabela */
  25. CREATE TABLE test_87
  26. (
  27. id serial PRIMARY KEY,
  28. pole_json json
  29. )
  30. ;
  31.  
  32. /* index - w 1. zapytaniu z niego korzysta */
  33. CREATE INDEX idx_pole_json ON test_87 (cast(pole_json->'nazwisko' AS text));
  34.  
  35. /* wartosci */
  36. INSERT INTO test_87(pole_json) VALUES
  37. ('{"imie":"ala", "nazwisko":"nowak"}'::json),
  38. ('{"imie":"ela", "nazwisko":"kowalska"}'::json),
  39. ('{"imie":"tomek", "nazwisko":"wisniewski"}'::json),
  40. ('{"imie":"darek", "nazwisko":"grzelak"}'::json),
  41. ('{"imie":"marek", "nazwisko":"nowak"}'::json);
  42.  
  43. /* 1. wybranie po nazwisku */
  44. SELECT pole_json->'imie', pole_json->'nazwisko' FROM test_87 WHERE (pole_json->'nazwisko')::text='"nowak"';
  45.  
  46. /* 2. update - dodanie plci do JSONa*/
  47. UPDATE test_87 SET pole_json=json_add(pole_json, json('plec', case when (pole_json->'imie')::text LIKE '%a"' then 'k' else 'm' end))
  48.  
  49. /* 3. grupowanie */
  50. SELECT (pole_json->'plec')::text, count(*), string_agg((pole_json->'imie')::text, ',') FROM test_87 GROUP BY 1





To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.