2013-12-11 4 views
10

JSON representation of a mailbox so that I can look up mails easily、たとえばmailjson[UID].Bodyを設計しました。JSONデザインのベストプラクティス

しかしAngularjsとエンバーを見た後、MVC JSエンジンをテンプレート化、JSON形式でなければならないようだ。

[{ 
    "id": 1, 
    "body": "Blah blah blah..." 
}, 
{ 
    "id": 2, 
    "body": "More blah foo blah" 
}, 
{ 
    "id": 3, 
    "body": "Hopefully you understand this example" 
}] 

そしてベースのアイテムをつかむために、いくつかのfindAll(ID)関数がありますJSONを反復処理するidが望むIDでだから私はJSONデザインがメリットがあるのだろうか?私はそれを間違っているのですか?なぜ私のJSONで使用しているdict lookupデザインを人々が使用しないのですか?

私は良いデータ構造設計を持っていることを確認するための他のヒント、私は感謝します。

+2

これは、基本的にハッシュテーブル対リスト/アレイの利点を求めているようです。それはあなたが主にあなたのデータを使って何をしているかによって異なります。 –

+0

私はメールアーカイブを生成するためにこれをやっています。https://github.com/kaihendry/imap2json – hendry

+3

これは間違った答えです:-)彼が意味するのは、それがあなたがそれをどのように保管しているのかに依存するということです。データの処理に*どのアルゴリズムを使用しますか?あなたが大容量のコンテナ内の情報を見つけるためにいくつかの文字列キーを持つことがわかっている場合は、ストレージコンテナのn番目の要素にアクセスしようとしていることがわかっている場合は、配列を参照してください。 1つは順序付けられた(番号の付いた)ストレージで、もう1つは順序なしです。 IDで電子メールを取得しようとしていて、IDの番号付けに(大きな)ギャップがない場合は、配列が優れています。 –

答えて

6

JSONで大きなテーブルを格納するベストプラクティスは、配列を使用することです。

なぜなら、JSON配列をメモリ配列に解析すると、ビルドマップのスピード違反がないからです。いくつかのフィールドでインメモリー索引を構築して、迅速にアクセスできるようにする必要がある場合は、ロード中またはロード後に行うことができます。しかし、JSONパーサーは、構造に基づいて常に巨大なIDマップを作成する必要があるため、マップ作成なしでJSONをすぐにロードする選択肢はありません。

データをメモリに保存する方法は、内部JavaScriptマップ構造をシリアル化/デシリアライズする方法がないため、ディスク上のストレージの構造と同じである必要はありません。可能であれば、MS SQL Serverがテーブルとインデックスを格納するように、インデックスをシリアル化して格納します。

しかし、使用しているフレームワークがメモリとディスクの構造が同じであれば、idを大きなオブジェクトでキーとして使用する選択をサポートしています。これは、JSONリクエストでidをサーバーサーバーとブラウザの両方がメモリ内の電子メールアイテムの重要なリストを保持していると仮定して、電子メールアイテムを使用してアクションを実行するか、UIの状態を更新します。

関連する問題