Я уже некоторое время играю с Ruby EventMachines и думаю, что понимаю его основы.
Однако я не уверен, как правильно читать большие файлы (120 МБ).Моя цель - построчно читать файл и записывать каждую строку в базу данных Cassandra (то же самое должно быть с MySQL, PostgreSQL, MongoDB и т. Д., Поскольку клиент Cassandra явно поддерживает EM).Простой фрагмент кода блокирует реактор, верно?
require 'rubygems'
require 'cassandra'
require 'thrift_client/event_machine'
EM.run do
Fiber.new do
rm = Cassandra.new('RankMetrics', "127.0.0.1:9160", :transport => Thrift::EventMachineTransport, :transport_wrapper => nil)
rm.clear_keyspace!
begin
file = File.new("us_100000.txt", "r")
while (line = file.gets)
rm.insert(:Domains, "#{line.downcase}", {'domain' => "#{line}"})
end
file.close
rescue => err
puts "Exception: #{err}"
err
end
EM.stop
end.resume
end
Но как правильно получить асинхронное чтение файла?