Czy MariaDB obsługuje rodzimy typ danych kolumny JSON?

13

Nie mówię o kolumnach dynamicznych, pytam o typ danych macierzystych kolumn JSON. Krótko mówiąc, czy mogę uruchomić następujący kod w dowolnej wersji MariaDB?

CREATE TABLE example (names JSON);

O ile wiem, tak nie jest, ale wciąż nie jestem pewien, ponieważ wiele osób mówi o wsparciu JSON na MariaDB od wieków, ale żaden nie powiedział, że w końcu został wdrożony.

-- Aktualizacja --

Właśnie znalazłem trzy problemy wciąż otwarte na MariaDB Jira dotyczące obsługi typów danych JSON, co oznacza, że ​​wciąż nie jest jeszcze zaimplementowane, prawda?

Omraniczny
źródło
Ta aktualizacja nie powinna być pytaniem, oto odpowiedź. Powinieneś to wyprowadzić i odpowiedzieć samemu. @Omranic.
Evan Carroll
> JSON to alias dla LONGTEXT wprowadzony ze względu na kompatybilność z typem danych JSON MySQL. mariadb.com/kb/en/library/json-data-type
zx1986

Odpowiedzi:

7

Wsparcie JSON będzie dostępne w MariaDB 10.2. Zobacz oficjalny post na blogu MariaDB z 28.02.2017. Istnieje kilka przykładowych instrukcji SQL i sprawdzania poprawności.

JSON szybko staje się standardowym formatem wymiany danych i danych nieustrukturyzowanych, a MariaDB 10.2 dodaje zakres funkcji obsługujących JSON, nawet jeśli typ danych JSON nie jest jeszcze zaimplementowany. Istnieje kilka powodów, dla których nie ma typu danych JSON, ale jednym z nich jest to, że tak naprawdę nie ma tak wielu zalet, ponieważ JSON jest formatem tekstowym. Ten post na blogu ma na celu opisanie JSON i przypadków użycia dla niego, a także opisanie funkcji i zastosowań JSON MariaDB 10.2, a także pokazanie innych dodatków do MariaDB 10.2, które są przydatne do przetwarzania JSON.

Iwanow
źródło
2
Do 10.2.6 nie obsługuje jeszcze natywnego JSON.
kittygirl
1
Przechowują json jako zwykły tekst dopiero od 10.3
Musa Haidari,
6

To zależy od tego, co masz na myśli, mówiąc „typ danych”. Niektóre bazy danych, takie jak PostgreSQL, mają typ danych JSON, który umożliwia wyszukiwanie pełnotekstowe, binarny mechanizm przechowywania, indeksowanie i pełny zestaw operatorów w celu uzyskania dostępu do danych. Maria jeszcze tego nie ma. Typ danych jest konkretnie śledzony przez MDEV-9144 .

Mimo to, zapewnia bardzo ograniczony typ MySQL, od jednego z opiekunów błędów,

Typ danych JSON jest bezpośrednio sprzeczny ze standardem SQL, co oznacza, że ​​funkcje JSON_ * przyjmują ciąg znaków jako argument. Ponadto pod względem szybkości MariaDB nie potrzebuje binarnego JSON, zgodnie z naszymi testami porównawczymi, nasz parser JSON działa tak szybko na tekst JSON jak MySQL na binarnym JSON. Oznacza to, że w MariaDB można użyć VARCHAR lub TEXT dla JSON. Jeśli potrzebna jest walidacja, można to zrobić z ograniczeniem CHECK:

my_json_column TEXT CHECK (JSON_VALID(my_json_column))

Dodamy jednak „typ” JSON dla zgodności z MySQL.

Z mojej lektury nie jest to dokładnie sens binarnego JSON-a, zajrzyjmy do dokumentów MySQL

Format binarny ma strukturę umożliwiającą serwerowi wyszukiwanie podobiektów lub zagnieżdżonych wartości bezpośrednio według indeksu klucza lub tablicy bez odczytywania wszystkich wartości przed lub po nich w dokumencie.

Ponownie PostgreSQLjsonb robi o wiele więcej.

Dane jsonb są przechowywane w zdekomponowanym formacie binarnym, co sprawia, że ​​wprowadzanie danych jest nieco wolniejsze z powodu dodatkowego obciążenia konwersji, ale znacznie szybsze w przetwarzaniu, ponieważ nie jest wymagana ponowna analiza. jsonb obsługuje również indeksowanie, co może być znaczącą zaletą.

tldr; Maria DB nie ma jeszcze typu JSON. Nawet gdy otrzymuje „typ”, jest to po prostu cienkie opakowanie do sprawdzania poprawności tekstu (jak jsontyp PostgreSQL ). Nie ma planów binarnego typu JSON (takich jak PostgreSQL jsonb), ponieważ deweloperzy najwyraźniej nie rozumieją zalet.

Evan Carroll
źródło
1
Użytkownik naprawdę nie dba o to, czy JSON w Postgresie jest przechowywany złożony czy rozkładany, czy json jest binarny czy nie. Ważne jest dla JSON a) co go umieścisz, wydostaniesz się i istnieje możliwość sprawdzenia poprawności danych wejściowych. b) możesz indeksować i wyszukiwać części JSON. 3) Istnieją funkcje do obsługi na nim.
Vladislav Vaintroub