1

ここの記事をフォローしています。ハッシュルートに行きたいと思っていますが、複数のtaxi_carがあるとどうなるか混乱しています

<?php
$redis->hset("taxi_car", "brand", "Toyota");
$redis->hset("taxi_car", "model", "Yaris");
$redis->hset("taxi_car", "license number", "RO-01-PHP");
$redis->hset("taxi_car", "year of fabrication", 2010);
$redis->hset("taxi_car", "nr_starts", 0);
/*
$redis->hmset("taxi_car", array(
    "brand" => "Toyota",
    "model" => "Yaris",
    "license number" => "RO-01-PHP",
    "year of fabrication" => 2010,
    "nr_stats" => 0)
);
*/
echo "License number: " .
    $redis->hget("taxi_car", "license number") . "<br>";

// remove license number
$redis->hdel("taxi_car", "license number");

// increment number of starts
$redis->hincrby("taxi_car", "nr_starts", 1);

$taxi_car = $redis->hgetall("taxi_car");
echo "All info about taxi car";
echo "<pre>";
var_dump($taxi_car);
echo "</pre>";

Taxi_cars に関するすべてのデータを含むデータベースを redis で作成するにはどうすればよいでしょうか。これで、redis にはデータベースではなくキーがあることがわかりましたが、ここではリレーショナル用語を使用して自分自身を表現しています。私が1000台のtaxi_carsを持っている場合、1000個の初期キーは必要ありません。それは何かのサブセットでなければなりません。これを説明する方法さえわかりません。

編集

つまり、ブランドの下にトヨタ、ホンダ、スズキがあり、その下にタコマ、アコードなどのさまざまなスタイルがあるとしましょう

そのデータをどのように挿入し、それを取得する際に手紙を書くのでしょうか。ありがとう

4

1 に答える 1

2

リレーショナル モデルの概念を Redis のような NoSQL ストアにマッピングしようとするのではなく、データ構造とアクセス パスの観点から考える必要があります。

以下にいくつかの簡単な例を示します。

SQLite から Redis への移植

redis でキーを操作する

redisで多対多の関係を持つ方法

ここでは、車のモデルのレコードを保存します。最初にそれらを識別するための何かが必要です (つまり、リレーショナル用語では主キー)。次に、これらのレコードを Redis の最上位の辞書に保存できます。

以下は保管しないでください。

taxi_car => hash{ brand" => "Toyota", "model" => "Yaris", etc ... }

しかし:

taxi_car:1 => hash{ brand" => "Toyota", "model" => "Yaris", etc ... }
taxi_car:2 => hash{ brand" => "Toyota", "model" => "Prius", etc ... }
taxi_car:3 => hash{ brand" => "Tesla", "model" => "Model_S", etc ... }

ここで、アクセス パスを予測する必要があります。たとえば、ブランドとモデルごとに車を取得するには、追加のセットを追加する必要があります (インデックスとして使用するため):

brand:Toyota => set{ 1 2 }
brand:Tesla  => set{ 3 }
model:Yaris  => set{ 1 }
model:Prius  => set{ 2 }
model:Model_S => set{ 3 }

したがって、次を取得できます。

# Per brand
SMEMBERS brand:Toyota 
  -> returns 1 2
HGETALL taxi_car:1
HGETALL taxi_car:2

# Per model
SMEMBERS model:Prius
  -> returns 2
HGETALL taxi_car:2

# Per brand and per model (a bit useless here), plus associated data
# sort is used to get all the taxi_car data in one shot
sinterstore tmp brand:Toyota model:Prius
sort tmp by nosort get taxi_car:*->brand get taxi_car:*->model etc ...
于 2012-07-07T07:57:34.260 に答える