Database Reference
In-Depth Information
if batch.size == BATCH _ SIZE
flush(batch)
puts " #{count-1} items"
end
# Setzen Sie ein LIMIT, wenn nicht alle Daten eingefügt werden sollen
break if count >= LIMIT
end
# Verbliebene Werte schreiben
flush(batch)
puts " #{count-1} items in #{Time.now - start} seconds"
$ ruby isbn _ pipelined.rb isbn.tsv
2666642 items in 79.312975 seconds
Das reduziert die Anzahl der notwendigen Redis-Verbindungen, doch der Auf-
bau der Pipeline ist selbst mit einem Overhead verbunden. Im Produktivein-
satz sollten Sie mit verschiedenen Batch-Größen experimentieren.
Ein kurzer Hinweis für Ruby-Nutzer: Wenn Ihre Anwendung nicht-blockie-
rend über Event Machine läuft, kann der Ruby-Treiber em-synchrony über
EM::Protocols::Redis.connect verwenden.
Redis-Cluster
Neben der einfachen Replikation bieten viele Redis-Clients ein Interface zum
Aufbau einfacher, verteilter Ad-hoc-Cluster an. Der Ruby-Client redis-rb un-
terstützt einen über eine konsistente Hash-Funktion verwalteten Cluster. Sie
kennen die konsistente Hash-Funktion aus dem Riak-Kapitel, wo Knoten ein-
gefügt und entfernt werden konnten, ohne die meisten Schlüssel verfallen
lassen zu müssen. Die Idee ist hier die gleiche, wird aber durch einen Client
verwaltet und nicht durch die Server selbst.
Zuerst benötigen wir einen weiteren Server. Im Gegensatz zu unserem Mas-
ter/Slave-Setup verwenden unsere beiden Server die Master(Standard)-Kon-
figuration. Wir haben die redis.conf kopiert und den Port auf 6380 gesetzt.
Mehr ist für die Server nicht nötig.
redis/isbn_cluster.rb
LIMIT = 10000
%w{rubygems time redis}.each{|r| require r}
require 'redis/distributed'
$redis = Redis::Distributed.new([
"redis://localhost:6379/" , "redis://localhost:6380/"
])
$redis.flushall
count, start = 0, Time.now
File.open(ARGV[0]).each do |line|
 
Search WWH ::




Custom Search