Database Reference
In-Depth Information
count += 1
next if
count == 1
isbn,
_
,
_
, title = line.split(
"
\t
"
)
next if
isbn.empty? || title ==
"
\n
"
$redis.set(isbn, title.strip)
# Setzen Sie ein LIMIT, wenn nicht alle Daten eingefügt werden sollen
break if
count >= LIMIT
end
puts
"
#{count}
items in
#{Time.now - start}
seconds"
Das Bridging zwischen zwei oder mehr Servern verlangt nur kleinere Ände-
rungen an unserem ISBN-Client. Zuerst müssen wir die Datei
redis/distri-
buted
aus dem Redis-Gem einbinden.
require 'redis/distributed'
Dann ersetzen wir den Redis-Client durch Redis::Distributed und übergeben
ihm ein Array mit Server-URIs. Jeder URI besteht aus dem
redis
-Schema,
dem Server (localhost) und dem Port.
$redis = Redis::Distributed.new([
"redis://localhost:6379/",
"redis://localhost:6380/"
])
Die Ausführung des Clients erfolgt wie vorher.
$ ruby isbn
_
cluster.rb isbn.tsv
Doch der Client übernimmt nun wesentlich mehr Arbeit, da er die Berech-
nung übernimmt, welche Schlüssel auf welchen Servern gespeichert wer-
den. Sie können überprüfen, ob die Schlüssel tatsächlich auf separaten Ser-
vern gespeichert werden, indem Sie den gleichen ISBN-Schlüssel von jedem
Server über die Kommandozeile abrufen. Nur ein Client liefert den Wert mit
GET
zurück. Doch solange Sie Schlüssel abrufen, die über die gleiche Re-
dis::Distributed-Konfiguration gesetzt wurden, ruft der Client die Werte von
den richtigen Servern ab.
Bloomilter
Einen eindeutigen Begriff zu verwenden, ist eine ausgezeichnete Strategie,
wenn etwas online gefunden werden soll. Wenn Sie ein Buch mit dem Titel
The Jabbyredis
schreiben, können Sie ziemlich sicher sein, dass jede Such-
maschine auf sie verlinkt. Wir wollen ein Skript entwickeln, mit dem wir
schnell überprüfen können, ob ein Wort in den Titeln unseres ISBN-Kata-