2016-12-12 6 views
0

Node/ExpressアプリケーションのバックエンドをMongoDBからRedisにリファクタリングしています。Redisの複雑なデータ構造

私のデータは現在、数十(約70)のドキュメントで構成され、それぞれのドキュメントはNAME、略語ABBR、GeoJSON LOCATION、および整数パラメータの配列で構成されています。各文書のパラメータは数分ごとに更新されますが、残りの属性は固定されたままです。 PARAMETER属性の長さは変わることがあります(空でもかまいません)。私は与えられたポイントに最も近い場所をチェックし、名前、省略形、およびパラメータを表示するためにデータに対して多くのクエリを実行したいと思います。

文書例:

{ 
    _id: ObjectId("1"), 
    name: 'A place', 
    abbr: 'PLC', 
    location: { type: "Point", coordinates: [ -130.922, 33.289 ]}, 
    parameters: [3 4 28], 
} 

私はRedisの中GEOADDコマンドに精通していますが、私は与えられた自分のデータを保持するために、より複雑なデータ構造を作成するためにそれを使用する方法が表示されないようであればI GEOADDコマンドを使用して場所を指定し、HMSETを使用して名前と省略形のフィールドを追加しようとすると、WRONGTYPEエラーが発生します。

私は参考透明度を評価し、タイプが真剣に取られたときに好きなので、このエラーは高く評価されます。しかし、私はRedisがどのようにデータを格納しているかを根本的に誤解していると思う。私はもともと概念的Redisのについての学習の後にリファクタリング始めたとき、私は

1 name 'A Place' abbr 'PLC' location -130.922 33.289 parameters 3 4 28 

かどうか、非常に、その簡単に沿って私のセットでの位置の近さを照会するための方法の場合のような形のもので、私のデータを格納することができることも想定しました他の属性と一緒に。

答えて

2

Redisコアデータ構造をネストすることはできません。あなたの例では、各レベルごとに異なるキー(およびデータ構造)を使用する必要があります。プロパティのハッシュ、場所のジオセット、おそらくはパラメータのハッシュがあります。

これを実行したら、最終的な回答を構成するために3回の読み込みをクエリに含める必要があります。

+0

実用的なアプローチは、ハッシュキーに "-130.922,33.289"という文字列を格納し、そのIDをGEOADDを持つジオセットに追加することで、インデックスとして機能します。 –

関連する問題