Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy jest jakiś sposób na użycie obiektów json w SQL?

JSON jako intencja

Nie ma możliwości pracy z JSON w MySQL. Niektóre DBMS mogą obsługiwać JSON, ale to nie wchodzi w rachubę, a poza tym każda taka "obsługa" polega tylko na wykonywaniu pewnych operacji specyficznych dla JSON, ale nie na modelowaniu twojej architektury (a te dwie rzeczy są zupełnie inne) Więcej , w pełnym tego słowa znaczeniu, koncepcja modelu (tj. relacje) dla MySQL jest inna niż w przypadku JSON:jako relacyjny DBMS wynika z relacyjny model danych , a JSON to zupełnie inny format. Przechowasz go jako zwykłą wartość ciągu, więc nie można z nim nic zrobić w inny sposób, jeśli nie użyjesz funkcji ciągów. Więc nawet pracując z JSONem, zrobisz to poza modelem relacyjnym, dlatego nie będzie możliwe zachowanie cech relacyjnych, takich jak na przykład integralność referencyjna.

Opcje rozwiązania

Masz kilka opcji:

  • Przeprowadź migrację do Postgree SQL, ponieważ ma rozszerzoną obsługę json, od wersji 9.4 jest to jsonb i jest jeszcze szybszy. To może być najlepsza opcja, ponieważ jest to RDBMS i dlatego migracja nie będzie tak trudna, jak w przypadku prawdziwie zorientowanego na dokumenty systemu DBMS.
  • Lub migruj do Mongo teraz (jeśli masz taki zamiar), zanim będzie za późno. Weź pod uwagę, że Mongo to zupełnie inna rzecz niż RDBMS, jest zorientowana na dokumenty. Myślę, że to najlepsza opcja zarówno dla twojego projektu, jak i dla twojego klienta (a twoim zadaniem byłoby to wyjaśnić)
  • Zmień całą architekturę, aby nie przechowywać obiektów JSON i pracować ze znormalizowanymi (pod względem relacyjnym DB) jednostkami. To znaczy - tak, cała refaktoryzacja całego kodu, zmiana wszystkich relacji itp. W rzeczywistości jest to tylko opcja teoretyczna, nie dostaniesz na to ani czasu, ani pieniędzy.
  • Zaimplementuj własną bibliotekę JSON dla MySQL. Czy to trudne? Zależy od tego, co zrobisz ze swoim JSON, ale JSON jest formatem publicznym, więc przynajmniej będziesz wiedział, co robić. Możesz to zrobić jako UDF lub w obszarze użytkownika (tak z CREATE FUNCTION oświadczenie). Będzie to oczywiście wymagało określonych umiejętności i czasu. Złe rzeczy:błędy. Nawet jeśli będziesz w stanie stworzyć te funkcje szybciej niż przebudować swoją architekturę lub migrować do Mongo, nigdy nie będziesz pewien jakości tych funkcji. Nie ma możliwości przetestowania tego kodu natywnie. Mogę jednak dać wskazówkę w przypadku funkcji user-land - możesz użyć mysql-unit aby przetestować przechowywany kod, jeśli MySQL jest w wersji 5.6 lub nowszej (cóż, napisałem to narzędzie, ale... może też zawierać błędy)

Funkcje „standardowe”

Wreszcie, jeśli używasz MySQL 5.7, może być promyk nadziei dzięki wstępnie wydanych funkcji JSON - więc możesz spróbować do korzystania z funkcji JSON w wersji alfa, która obecnie istnieje dla MySQL 5.7. Ale nie zalecałbym (zdecydowanie) używania tego w prawdziwym projekcie, ponieważ te funkcje nie są ani dobrze przetestowane, ani w ogóle niekompletne. Aby jednak zainstalować te funkcje, musisz pobrać odpowiedni pakiet, a następnie podłączyć je do swojego serwera, na przykład:

CREATE FUNCTION json_append       RETURNS string  SONAME 'libmy_json_udf.so';
CREATE FUNCTION json_valid        RETURNS integer SONAME 'libmy_json_udf.so';
CREATE FUNCTION json_extract      RETURNS string  SONAME 'libmy_json_udf.so';
CREATE FUNCTION json_replace      RETURNS string  SONAME 'libmy_json_udf.so';
CREATE FUNCTION json_remove       RETURNS string  SONAME 'libmy_json_udf.so';
CREATE FUNCTION json_set          RETURNS string  SONAME 'libmy_json_udf.so';
CREATE FUNCTION json_merge        RETURNS string  SONAME 'libmy_json_udf.so';
CREATE FUNCTION json_search       RETURNS string  SONAME 'libmy_json_udf.so';
CREATE FUNCTION json_contains_key RETURNS integer SONAME 'libmy_json_udf.so';

A potem będziesz mógł je wypróbować.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - domyślna wartość dla TIMESTAMP(3)

  2. Narzędzie do importowania plików CSV do bazy danych MySQL?

  3. Jak na stałe wyłączyć statystyki kolumn w MySQL 8?

  4. Zaktualizuj instrukcję w MySQL za pomocą C#

  5. Pobierz najnowszy wiersz z grupowaniem według i Laravel