web-dev-qa-db-ja.com

MariaDBはネイティブJSON列のデータ型をサポートしていますか?

動的列について話しているのではなく、ネイティブ列のJSONデータ型について質問しています。簡単に言うと、MariaDBのどのバージョンでも次のコードを実行できますか?

CREATE TABLE example (names JSON);

私の知る限りではそうではありませんが、MariaDBでのJSONのサポートについて古くから話題になっているトピックがたくさんあるため、まだわかりませんが、最終的に実装されたとは誰も言っていません。

-更新-

JSONデータ型のサポートに関するMariaDB Jiraで未解決の3つの問題が見つかりました。つまり、まだ実装されていません。

13
Omranic

JSONサポートは、MariaDB 10.2でサポートされる予定です。 2017年2月28日の 公式MariaDBブログ の投稿を参照してください。 SQLステートメントと検証の例がいくつかあります。

JSONは急速にデータ交換および非構造化データの標準形式になりつつあり、MariaDB 10.2はJSONデータ型がまだ実装されていなくても、JSONサポート関数に範囲を追加します。 JSONデータ型がない理由はいくつかありますが、1つは、JSONがテキストベースの形式であるため、実際にはそれほど多くの利点がないということです。このブログ投稿の目的は、JSONとその使用例、およびMariaDB 10.2 JSON関数とその使用方法について説明することと、JSON処理に役立つMariaDB 10.2へのその他の追加機能を示すことです。

7
Ivanov

それは、「データ型」と言うときの意味によって異なります。 PostgreSQLのような一部のデータベースには、全文検索、バイナリストレージメカニズム、インデックス作成、およびデータにアクセスするための演算子の完全なスイートを許可するJSONデータ型があります。マリアはまだそれを持っていません。特にデータタイプは MDEV-9144 によって追跡されます。

それでも、バグ管理者の1人から、very制限された型をMySQLにもたらします。

JSONデータ型はSQL標準と直接矛盾します。つまり、JSON_ *関数は文字列を引数として受け取ります。また、速度MariaDBはバイナリJSONを必要としないため、ベンチマークによれば、JSONパーサーはテキストJSONでバイナリJSON上のMySQLと同じくらい高速です。つまり、MariaDBでは、JSONに対してVARCHARまたはTEXTを使用できます。検証が必要な場合は、CHECK制約を使用して検証できます。

my_json_column TEXT CHECK (JSON_VALID(my_json_column))

ただし、MySQLとの互換性のためにJSONの「タイプ」を追加します。

私の読書から、それは正確にバイナリJSONのポイントではありません MySQL docs を参照してみましょう

バイナリ形式は、サーバーがドキュメント内の前後のすべての値を読み取ることなく、キーまたは配列インデックスによってサブオブジェクトまたはネストされた値を直接検索できるように構造化されています。

繰り返しますが、 PostgreSQLのjsonb は、それよりもたくさんを超えます。

jsonbデータは分解されたバイナリ形式で保存されます。これにより、変換オーバーヘッドが追加されるため、入力は少し遅くなりますが、再解析が必要ないため、処理は大幅に速くなります。 jsonbはインデックス作成もサポートしますが、これは大きな利点になります。

tldr; Maria DBにはまだJSONタイプがありません。 「型」を取得した場合でも、テキスト検証の薄いラッパーにすぎません(PostgreSQLのjson型のように)。開発者が利点を理解していないように見えるため、バイナリのJSON型(PostgreSQLのjsonbなど)の計画はありません。

6
Evan Carroll