web-dev-qa-db-ja.com

jsonの大きな塊をデータベース行に保存するのは賢明ですか

Amazonからの製品の詳細をデータベースに保存するこのプロジェクトがあります。

それがどれほど大きいかについてあなたにアイデアを与えるためだけに:

[{"title":"Genetic Engineering (Opposing Viewpoints)","short_title":"Genetic Engineering ...","brand":"","condition":"","sales_rank":"7171426","binding":"Book","item_detail_url":"http://localhost/wordpress/product/?asin=0737705124","node_list":"Books > Science & Math > Biological Sciences > Biotechnology","node_category":"Books","subcat":"","model_number":"","item_url":"http://localhost/wordpress/wp-content/ecom-plugin-redirects/ecom_redirector.php?id=128","details_url":"http://localhost/wordpress/product/?asin=0737705124","large_image":"http://localhost/wordpress/wp-content/plugins/ecom/img/large-notfound.png","medium_image":"http://localhost/wordpress/wp-content/plugins/ecom/img/medium-notfound.png","small_image":"http://localhost/wordpress/wp-content/plugins/ecom/img/small-notfound.png","thumbnail_image":"http://localhost/wordpress/wp-content/plugins/ecom/img/thumbnail-notfound.png","tiny_img":"http://localhost/wordpress/wp-content/plugins/ecom/img/tiny-notfound.png","swatch_img":"http://localhost/wordpress/wp-content/plugins/ecom/img/swatch-notfound.png","total_images":"6","amount":"33.70","currency":"$","long_currency":"USD","price":"$33.70","price_type":"List Price","show_price_type":"0","stars_url":"","product_review":"","rating":"","yellow_star_class":"","white_star_class":"","rating_text":" of 5","reviews_url":"","review_label":"","reviews_label":"Read all ","review_count":"","create_review_url":"http://localhost/wordpress/wp-content/ecom-plugin-redirects/ecom_redirector.php?id=132","create_review_label":"Write a review","buy_url":"http://localhost/wordpress/wp-content/ecom-plugin-redirects/ecom_redirector.php?id=19186","add_to_cart_action":"http://localhost/wordpress/wp-content/ecom-plugin-redirects/add_to_cart.php","asin":"0737705124","status":"Only 7 left in stock.","snippet_condition":"in_stock","status_class":"ninstck","customer_images":["http://localhost/wordpress/wp-content/uploads/2013/10/ecom_images/51M2vvFvs2BL.jpg","http://localhost/wordpress/wp-content/uploads/2013/10/ecom_images/31FIM-YIUrL.jpg","http://localhost/wordpress/wp-content/uploads/2013/10/ecom_images/51M2vvFvs2BL.jpg","http://localhost/wordpress/wp-content/uploads/2013/10/ecom_images/51M2vvFvs2BL.jpg"],"disclaimer":"","item_attributes":[{"attr":"Author","value":"Greenhaven Press"},{"attr":"Binding","value":"Hardcover"},{"attr":"EAN","value":"9780737705126"},{"attr":"Edition","value":"1"},{"attr":"ISBN","value":"0737705124"},{"attr":"Label","value":"Greenhaven Press"},{"attr":"Manufacturer","value":"Greenhaven Press"},{"attr":"NumberOfItems","value":"1"},{"attr":"NumberOfPages","value":"224"},{"attr":"ProductGroup","value":"Book"},{"attr":"ProductTypeName","value":"ABIS_BOOK"},{"attr":"PublicationDate","value":"2000-06"},{"attr":"Publisher","value":"Greenhaven Press"},{"attr":"SKU","value":"G0737705124I2N00"},{"attr":"Studio","value":"Greenhaven Press"},{"attr":"Title","value":"Genetic Engineering (Opposing Viewpoints)"}],"customer_review_url":"http://localhost/wordpress/wp-content/ecom-customer-reviews/0737705124.html","flickr_results":["http://localhost/wordpress/wp-content/uploads/2013/10/ecom_images/5105560852_06c7d06f14_m.jpg"],"freebase_text":"No around the web data available yet","freebase_image":"http://localhost/wordpress/wp-content/plugins/ecom/img/freebase-notfound.jpg","ebay_related_items":[{"title":"Genetic Engineering (Introducing Issues With Opposing Viewpoints), , Good Book","image":"http://localhost/wordpress/wp-content/uploads/2013/10/ecom_images/140.jpg","url":"http://localhost/wordpress/wp-content/ecom-plugin-redirects/ecom_redirector.php?id=12165","currency_id":"$","current_price":"26.2"},{"title":"Genetic Engineering Opposing Viewpoints by DAVID BENDER - 1964 Hardcover","image":"http://localhost/wordpress/wp-content/uploads/2013/10/ecom_images/140.jpg","url":"http://localhost/wordpress/wp-content/ecom-plugin-redirects/ecom_redirector.php?id=130","currency_id":"AUD","current_price":"11.99"}],"no_follow":"rel=\"nofollow\"","new_tab":"target=\"_blank\"","related_products":[],"super_saver_shipping":"","shipping_availability":"","total_offers":"7","added_to_cart":""}]

したがって、テーブルの構造は次のとおりです。

  • asin
  • 題名
  • 詳細(jsonの製品詳細)

10,000個の製品を格納する必要がある場合、パフォーマンスは低下しますか?これを行う他の方法はありますか?次のことを考えていますが、クライアント側でもデータを使用する必要があるため、現在の設定は本当に最も便利です。

  • 製品の詳細をファイルに保存します。 ASIN123.jsonのようなもの
  • 製品の詳細を1つの大きなファイルに保存します。 (私はそれがこのファイルからデータを抽出するためのドラッグになると思います)
  • 詳細の各フィールドを独自のテーブルフィールドに格納する

前もって感謝します!

[〜#〜]更新[〜#〜]

答えてくれてありがとう!質問にさらに詳細を追加したいだけです。最初に、レコードは特定の間隔で更新されます。価格やタイトルなどの特定のデータのみが更新されます。

次に、jsonエンコードされたデータをクライアント側でも使用しているので、最初はjsonエンコードするだけの方が簡単なので、変換せずにクライアント側で簡単に使用できます。これは、RDBMSセットアップでフィールドを通常のテーブルフィールドに単に格納することについてのあなたの意見を変えますか?

7
Wern Ancheta

サイズはそれほど問題ではありませんが、データをクエリして維持する機能は重要です。

たとえば、Greenhaven Pressが名前をGreenhaven Press Internationalに変更することを決定した場合、レコードを検索し、逆シリアル化し、変更し、シリアル化し、データベースにポンプで戻す必要があります。

これを検討してください:これらのオブジェクトをシリアル化されたデータとして保存すると、リレーショナル形式で保存するよりも明確な追加された値が提供されますか?答えが「いいえ」の場合、それは面倒なことに値しないかもしれません。

[〜#〜]更新[〜#〜]

あなたの質問の更新に関する限り、私はノーと言う傾向があります、それはほとんどまたはまったく違いがありません。このjson文字列の1つのフィールドを更新するか、すべてを更新するかは、プロセス全体が同一であるため、無関係です。

要件が変わる可能性があることを忘れないでください。クライアント側でjsonを使用している場合でもnow将来的にjsonが必要になるという意味ではありません。リレーショナル形式でデータを保存すると、関係、データ制約、クエリ可能なメタデータを維持しながら、テクノロジーに依存しないことが保証されます。これが、リレーショナルデータベースの真の価値が存在する場所です。これらの利点を捨てても、パフォーマンスは向上せず、アプリケーションのスケーラビリティや柔軟性も向上しません。

31
Wim Ombelets

Jsonの大きな塊をデータベース行に格納することは賢明ですか?

いいえ、一般的に、リレーショナルデータベースの1つのセルに複数の値のデータを格納することはお勧めしません。RDBMSの基本的な構造/規則に反するためです(他の回答で説明)。

ただし、JSONオブジェクトを格納し、それらのオブジェクト内のデータを検索するのに役立つ、MongoDBなどの非リレーショナル(非SQL)データベースの1つを使用する可能性を検討する場合があります。

5
Aziz Shaikh

これらのJSONフィールドに対してクエリをすぐに実行する必要がない場合は、この方法で問題が発生することはありません。ただし、逆シリアル化/シリアル化のパフォーマンスヒットがプログラムの問題ではない場合に限ります。

後で、その「sales_rank」JSONフィールドに基づいて注文/フィルターする必要が生じたとしましょう。データを実行してオブジェクトを逆シリアル化するプログラムを作成し、そのフィールドをテーブル内の専用の列にコピーして、インデックスを作成します。この控えめな列をJSONオブジェクトと同期して維持するには、カスタムのシリアル化/更新ルーチンが必要ですが、難しくありません。

この種のハイブリッドアプローチは、NoSQLの高速な開発速度と、それを必要とするフィールドのリレーショナルモデリングの利点が得られるため、アプリの機能をまだ理解している場合に非常に役立ちます。

4
Graham

完全なドキュメントを1つのエンティティとして保存する方が、アプリケーションに適している場合があります。 nosqlデータベースとドキュメントデータベースが増加しているのは偶然ではありません。

欠点を認識している場合、それは大丈夫なアプローチになる可能性がありますが、独自のデータベースを発明するのではなく、実際のドキュメントデータベースも検討する必要があります。

2

SQL Server 2016では、他のすべてのNOSQLデータベースと同様に、JSONを保存して処理することもできます。私はまだRDBMSアプローチがおそらく最良のルートであり、それがあなたに最も柔軟性を与えるということを世間の多くの人々に同意します。

SQL Server 2016 JSONアプローチでは、それがどの程度の力を持っているか(編集、削除、json行のフィールド/プロパティを検索できることはわかっています)はわかりませんが、調査する価値のあるオプションです。

https://docs.Microsoft.com/en-us/sql/relational-databases/json/store-json-documents-in-sql-tables?view=sql-server-2017

0
PBo