Database Reference
In-Depth Information
$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"
$ ruby isbn.rb isbn.tsv
2456384 items in 266.690189 seconds
Wenn Sie das Einfügen beschleunigen wollen und nicht mit JRuby arbei-
ten, können Sie optional das hiredis -Gem installieren. Dieser C-Treiber ist
wesentlich schneller als der native Ruby-Treiber. Entfernen Sie den Kom-
mentar in der hiredis require -Zeile, damit der Treiber geladen wird. Bei
dieser CPU-gebundenen Operation werden Sie vielleicht keine große Verbes-
serung sehen, doch wir empfehlen hiredis wärmstens für den produktiven
Ruby-Einsatz.
Eine große Verbesserung werden Sie beim Pipelining sehen. Nachfolgend ver-
arbeiten wir jeweils 1000 Zeilen und fügen sie dann über eine Pipeline ein.
Das hat unsere Einfügezeit um über 300 Prozent reduziert.
redis/isbn_pipelined.rb
BATCH _ SIZE = 1000
LIMIT = 1.0 / 0
# 1.0/0 ist bei Ruby Unendlich
# %w{rubygems hiredis redis/connection/hiredis}.each{|r| require r}
%w {rubygems time redis} .each{|r| require r}
$redis = Redis.new(:host => "127.0.0.1" , :port => 6379)
$redis.flushall
# Daten in einem einzigen Batch-Update einfügen
def flush(batch)
$redis.pipelined do
batch.each do |saved _ line|
isbn, _ , _ , title = line.split( " \t " )
next if isbn.empty? || title == " \n "
$redis.set(isbn, title.strip)
end
end
batch.clear
end
batch = []
count, start = 0, Time.now
File.open(ARGV[0]).each do |line|
count += 1
next if count == 1
# Zeilen in Array schieben
batch << line
# Schreiben, wenn Array auf BATCH _ SIZE anwächst
 
Search WWH ::




Custom Search