2012-01-02 5 views
1

私が直面している状況は、さまざまな時点で異なる店舗で保管されている在庫在庫を表すために(メモリの記憶域使用量に関して)最善の方法を実行しようとしていることです。MySQLの最適なフィールドのメモリ使用量

表:店舗

異なる店の一覧ですテーブル:セットアップは以下の通りである。

  • ストアID(PK)
  • 店舗名
  • 。 ..その他の詳細

タブル:在庫

  • ストックID(PK)
  • 証券名前
  • ...その他の詳細

表:ショップ証券ホールディングス

  • ストア同上
  • 証券同上
  • 数量

(ストアID、証券取引イドと日付Store IdとStocを使用して、主キーを共同して動作させる

表:ショップ証券ホールディングス

  • ストア同上
  • 証券外部キーとしてK Id)が

    代わりに私は、JSON文字列として保有株式を保存するために考えましたホールディングス

したがって、たとえば2011年1月1日に店舗1に50レモン(コード= 1)、100個のオレンジ(コード= 2)、20マンゴー(= 3)があるとすると、3つの設定は次のように表現します:

オプション1:

Store Id, Stock Id, Date, Quantity 

1 , 1, 2011-01-01, 50 
1 , 2, 2011-01-01, 100 
1 , 3, 2011-01-01, 20 

オプション2:

Store Id, Date, Stock Holdings 

1 , 1, 2011-01-01, \{1,50;2,100;3,20\} 

オプション3:

は、次のように2つのテーブルにそれを分割することにより、オプション1で日付を保存するの複製を減らすために、次のようになります。

Index, Store Id, Date 

1, 1, 2011-01-01 

Index, Stock Id, Stock Holdings 

1, 1, 50 
1, 2, 100 
1, 3, 20 

だから、質問は次のとおりです。

  1. 私の速度やストレージの考慮されるもの異なる実装のために。私の考えは、日付情報が複製されていないので、オプション3とオプション2がより良い選択である可能性が高いです。

  2. オプション2では、動的に割り当てられたJSON文字列を格納するメモリはありますか?私の言うことは、JSON文字列がかなり大きくなる可能性があり、結果としてその文字列を許可する必要があるということです。 JSON文字列に基づいて、新しいエントリが合計割り当てを必要とするのか、必要なメモリ量しか必要としないのでしょうか?私の理解は、varcharを使用するとメモリを動的に割り当てることになります。 varcharを使用することをお勧めしますか?

+0

オプション3の「インデックス」フィールドは何ですか?代理キー(自動番号)の場合は、代わりに「在庫ID」を使用することができます(私が何かを忘れていない限り)。 – Aaron

答えて

1

MySQLリレーショナル・データベース管理システムであり、正規化されたリレーショナルデータ上で動作するように設計されています。

これは、JSON文字列を効率的にインデックスできないことを意味します。つまり、stockIdで効率的に検索したり、集計クエリを実行したりすることはできません。

あなたが速くできるのは、店舗IDが与えられているすべての店舗の内容(必要かどうか)を検索することだけです。

したがって2オプションは、MySQLを純粋なKey-Valueストレージとして使用している場合にのみ有効です。その目的に適したシステムが市場に多数あります。オプション1とオプション3の間で選択するよう

、後者は単に代理1(index)との自然な複合キー(storeId, date)を置き換えます。

整数がINT + DATEの組み合わせよりも小さいため、このオプションがより良い場合はエッジケースがある可能性があります(特に、各日付に実際に多くのエントリを持つ日付が少なく、すべてのストアをクエリする必要はありません)。すべての日付は株式を与えられた)。ただし、すべてのテーブルを1つのテーブルに保持すると、パフォーマンスにとって重要な可能性があるstoreIdstockIdおよびdateの任意の組み合わせで複合インデックスを作成できます。あなたは2の間で選択を支援するために

、我々はあなたが実行されますクエリの種類を知っておく必要がありますが、(一つのテーブルでstoreIdstockIddate付き)option 1は間違いチョイスのモデルになります。

+0

遅れて申し訳ありません。おかげさまで、これは参考になりました。 – xyzjace