ストリームデータ処理について
Q&A
解決したいこと
ストリーミングデータ処理について
時間とともにほぼ無限に増えるデータにたいして1行分の値を保持し、その値に対応する値がでるまでのデータを読み捨てていきその値がでたときに相応の処理をする。
というものを無限ループ処理を利用して作りたいのですがどういった方法が適切ですか?
Rubyで行う予定です
0
Q&A
ストリーミングデータ処理について
時間とともにほぼ無限に増えるデータにたいして1行分の値を保持し、その値に対応する値がでるまでのデータを読み捨てていきその値がでたときに相応の処理をする。
というものを無限ループ処理を利用して作りたいのですがどういった方法が適切ですか?
Rubyで行う予定です
こんにちは。大枠としてtail -fコマンドの動作がやりたいことに近いのではないかと思いました。
Rubyでの実装とのことなのでこちらのサイトを参考にさせて頂きました
https://memorandums.hatenablog.com/entry/2022/03/09/141903
Google AI Sudioで少し改良したコードをサンプルとして貼り付けさせていただきます
変更した点
f = open('./log/development.log')
begin
f.sysseek(-32, IO::SEEK_END)
rescue
f.sysseek(0, IO::SEEK_SET)
end
buffer = "" # バッファを用意
while true
s = ""
f.sysread(128, s) rescue nil
if s.size == 0
# print '.'
sleep 1
else
buffer += s # バッファに追加
lines = buffer.split("\n")
buffer = lines.pop || "" # 未処理の行をバッファに残す
lines.each do |line|
if line.include?("何らかの文字列")
puts "処理対象の行: #{line}"
else
puts "読み込んだ行: #{line}"
end
end
end
end