データベーステーブルの構造が次のようであるとします。
id name college address
1 xxx nnn xn
2 yyy nnm yn
3 zzz nnz zn
このようにSQLの名前に基づいて学生の詳細を取得したい場合は、select * from student where name = 'xxx'を選択して、redisデータベースでどのようにそれを可能にするか
他のNoSQLデータストアと同様に、Redisには、実行する内容に基づいて異なる要件があります。
Redisには、必要に応じて役立つデータ構造がいくつかあります。たとえば、select * from student where name = 'xxx'
Redis hash
を使用できます。
redis 127.0.0.1:6379> hmset xxx id 1 college nnn address xn
OK
redis 127.0.0.1:6379> hgetall xxx
1) "id"
2) "1"
3) "college"
4) "nnn"
5) "address"
6) "xn"
他のクエリがある場合でも、同じことをしたいがwhere college = 'nnn'
次に、データを非正規化する必要があります。通常、SQLでは非正規化は悪いことですが、NoSQLでは非常に一般的です。
プライマリクエリが名前に対して行われるが、大学に対してクエリを実行する必要がある場合は、ハッシュに加えてset
を追加するなどの操作を行うことができます。
redis 127.0.0.1:6379> sadd college.nnn xxx
(integer) 1
redis 127.0.0.1:6379> smembers college.nnn
1) "xxx"
このような構造のデータで、college xnに行く名前のすべての情報を検索する場合は、最初にset
を選択し、次にhash
に返された名前に基づいて各set
を選択します。
一般に、要件によって、使用する設計と構造が決まります。
たった6つの原則(私が収集した here )で、SQL志向の人がRedisのアプローチに適応するのは非常に簡単です。簡単に言うと:
- 最も重要なことは、多くのキーと値のペアを生成することを恐れないことです。したがって、テーブルの各行を別のキーに自由に格納してください。
- Redisのハッシュマップデータ型を使用する
- 区切り記号( ":"など)によるテーブルの主キー値からのフォームキー名
- 残りのフィールドをハッシュとして保存する
- 単一の行をクエリする場合は、キーを直接作成してその結果を取得します
- 範囲を照会する場合は、キーにワイルド文字「*」を使用します。
リンクは、単純なテーブルの例とRedisでそれをモデル化する方法を示しています。これらの6つの原則に従って、通常のテーブルと同じように考えることができます。 (もちろん、CRUD、制約、関係など、それほど関連のない概念はありません。)
単純な場合、Vanilla redisは他の答えは完全に正しいですが、昨日(2016年12月2日)redis 4-rc1がリリースされました。
redis v4はモジュールのサポートを提供し、SQLiteをredis自体に埋め込むための小さなモジュールを作成しました。 rediSQL 。
そのモジュールを使用すると、redisインスタンス内で完全に機能するSQLデータベースを実際に使用できます。
searchbox フレームワークを試すことができます。 searchboxは、Criteria apiを使用してredisデータをクエリする簡単な方法を提供します。
OnceDBは、Redisに基づく全文検索インメモリデータベースです。 SQLリレーショナルデータベースやNoSQLスキーマレスデータベースなどのデータ管理をサポートしています。
OnceDBはRedisのデータストレージ構造を変更せず、Redisと完全に互換性があります。 Redisデータベースファイルは、OnceDBで直接操作し、Redisに返して使用することができます。
OnceDBは演算子を通じて補助インデックスを自動的に作成します。
= Ordinary field value, no index
@ Primary key
? Grouping index
* Keyword grouping index, separated by ',' between keywords
\ Sort index, the score weight of the index is the value of the field
たとえば、次のコマンドを実行してユーザーデータを追加します。
upsert user username @ dota password = 123456 title ? SDEI skills * Java,go,c
> OK
cキーワードを含むユーザーデータの検索や、ユーザー名とパスワードのフィールドの出力など、演算子を使用してインデックスから検索できます。
find user 0 -1 username = * password = * skills * c
find user 0 -1 username = * password = * skills * c
1) (integer) 1
2) "user:dota"
3) "dota"
4) "123456"
5) "Java,go,c"
続きを読む: OnceDBクイックスタート