2016-09-08 4 views
0

を作成し、私はこのようになり、次のデータがあります。Redisのデータベース設計 - 適切なデータ型を決定し、セカンダリインデックスに

​​

または

{ 
location: 'puerto rico', 
phone_num: 222-222-2222, 
ext: 8888 
} 

をマイエンドユーザーが照会できるようにする必要がありますREST APIとは、このようなものを送る:

http://myapp/internalext/123-123-1234

それは2222

の内線値を返す必要があります。しかし、私はまた、このようなクエリをサポートできるようにする必要があります。私には123-123-1234の値を返す必要があり

http://myapp/phonenumber/[email protected]

このようなクエリをサポートできるようにするために、私のデータをレディスで作成する最も良い方法が何であるかを知りたいと思います。私はノードredis Web APIを作成する必要があります。

これまでのところ、私はこのようなデータ作成しようとしました:私は、今、私は照会すると

127.0.0.1:6379> hset phone:lookup:e164 1231231234 1 

127.0.0.1:6379> set phone:1 
"{\"id\":1, \"locid\":1, \"loc_name\":\"zimbabwe\", \"extension\":\"2222\", \"e164\":\"1231231234\"}" 

そして私は、同じ電話オブジェクトを参照するセカンダリインデックスを作成します私が望むならば、2つの検索を行う必要があります。ユーザーは私に完全な電話番号を渡すのであれば、私は次のクエリを行う必要があります:

1. First lookup using the e164 as key: 
127.0.0.1:6379> hget phone:lookup:e164 1231231234 
"1" 

2. now you know that it's the first key in the "phone" set(?? i dunno if this is the terminology) 

127.0.0.1:6379> get phone:1 
"{\"id\":1, \"locid\":1, \"loc_name\":\"zimbabwe\", \"extension\":\"2222\", \"e164\":\"1231231234\"}" 
127.0.0.1:6379> 

質問

を、これはGET、これらのタイプのための私のRedisのデータを作成/整理するための最良の方法ですリクエスト? 私はハッシュについて読んでいます。しかし、私はどの方法を進めるかを知るのに十分なほど親しんでいません。 また、上記のデータを参考に、私はどのようにすべての電話番号とそのデータを表示するように要求しますか?

+0

あなたの条件についての詳細を知る必要があります。それはいつも電話番号からextnになりますか、またはその逆であるか、またはextnまたは電話番号から場所を取得する必要がありますか? –

+0

@KarthikeyanGopall主な翻訳は、電話番号とEXTNの間になります...しかし、私は右の「記録」を特定したら、私はただ一つのフィールド以上のものを返す必要があります。しかし、レコードが非常に小さい/フィールドが多すぎないので、いくつかの問題を見ない限り、私はすべてを返すかもしれません。 – Happydevdays

答えて

0

レコード全体を格納するのにHMSETを使用し、データを照会するための単純なキー/値を使用します。たとえば:

HMSET 123-123-1234 location "zimbabwe" phone_num "123-123-1234" ext "2222" 
HMSET 222-222-2222 location "puerto rico" phone_num "222-222-2222" ext "8888" 

SET ext:2222 123-123-1234 
SET ext:8888 222-222-2222 

は、使用123-123-1234を取得するには:

extまたは locationを取得するための数を考えると
GET ext:2222 

HMGET 123-123-1234 ext 
HMGET 123-123-1234 location 
+0

この場合、クエリはどのように見えますか? – Happydevdays

+0

別の質問は、上記の例にあるであろう、「myhash1」だけで電話番号をだろうか?そしてその方法で、私はあなたがmyhashにphone_numをマッピングしなければならないSADDを取り除くことができましたか? – Happydevdays

+0

2番目のコメントには、はいとはいが表示されます。私はその質問の答えを更新します。 – noun

1

それはあなたのGETにあなたが探しているhttp://myapp/phonenumber/[email protected]ことだろう指定されたURIのPSTN番号(単純に特定の内線番号ではない)のために?

この場合、URIはsip:[email protected]の電話番号のルックアップとなり、アプリケーションは電話番号123-123-1234を返すことが期待されます(「e164」という名前のキーに基づいて推測しています)。言い換えれば、コールがPSTN経由ではなくIP上で完了することができるので、会社ABCのためのDIDされているもの...

> get phone:1 
"{ 
    \"id\":1, 
    \"locid\":1, 
    \"loc_name\":\"zimbabwe\", 
    \"iso3166\":\"ZW\", 
    \"loc_idd\":\"263\", 
    \"extension\":\"2222\", 
    \"e164\":\"4.3.2.1.3.2.1.3.2.1.3.6.2.e164.arpa.\", 
    \"uri":\"sip:[email protected]\", 
    \"pstn\":\"+2631231231234\", 
    \"ui_disp_long\":\"+263-123-123-1234\", 
    \"ui_disp_short\":\"123-123-1234\" 
}" 
> 

限り、あなたのREST/Redisの質問に関しては、私は@nounに同意します。

関連する問題