Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

メッセージ履歴(JSON)から 10万行ずつの CSV ファイルを作成する方法を検討する #6

Closed
1 task done
inouetakuya opened this issue Feb 11, 2018 · 2 comments

Comments

@inouetakuya
Copy link
Contributor

inouetakuya commented Feb 11, 2018

こちら の、

使用言語については一旦ペンディング

やっぱり Node.js で書くのが素直かなあ...

と思っているけど、中間処理に DB が不要か、先に考えたい(CSV 作成処理とか)

理由: DB を扱うんだったら、Node.js より Ruby 使うほうが得意。Ruby というか ActiveRecord 使いたい。

のつづき。

メッセージ履歴(JSON)から 10万行ずつの CSV ファイルを作成する方法を検討する。

CSV ファイルの仕様

次の規則に準ずるものであれば、あらゆるソースからどんな区切りテキストファイルでもインポートすることができます。:

各行が新規メッセージである。
タイムスタンプ (unix タイムスタンプ)、チャンネル、ユーザー名、テキスト (この順序で記載のこと) について個別の列がある。
すべてが1つの圧縮されていないファイルにまとめられている。
メッセージは必ずタイムスタンプ毎(日時順で昇順)にソートしてください。
ファイルに含まれる HTML はリンク以外エスケープしていただいて問題ありません。
複数行にわたるメッセージは、テキストが " で囲まれている限り、raw の改行で表すことができます。
参考までに、ファイルには次のようなスタイルの行を含める必要があります:

"1357559471","random","myles","誰か\"ジョーク\"を聞きたい?"
"1357559472","random","myles","有効な回答はこれ:
ええ、もちろん
なんでわざわざ聞くの?"

この Issue の完了条件

  • メッセージ履歴(JSON)から 10万行ずつの CSV ファイルを作成するにあたって、DB が必要か不要か判断できること
@inouetakuya inouetakuya self-assigned this Feb 11, 2018
@inouetakuya
Copy link
Contributor Author

inouetakuya commented Feb 11, 2018

やっぱり DB 必要なのでは...?

メッセージは必ずタイムスタンプ毎(日時順で昇順)にソートしてください。

これがキモ。これを DB を介さずに実現しようとすると、複数の JSON ファイルの内容を一旦メモリに展開して、パースして、メッセージをソートしてあげる必要がある。

メモリをたくさん喰う(どのくらい喰うんだ?)

というわけで、DB をいきなり使っても、いったん DB なしでチャレンジしても良いと思うが、DB が必要になる可能性があるという前提で進んだほうが良さそう。

DB を介する場合

  • JSON をパースして、メッセージを DB に保存する
  • DB からメッセージをソートしたうえで取得し、CSV ファイルに書き込む

これはシンプルに実装できそう。

@inouetakuya
Copy link
Contributor Author

DB をいきなり使っても、いったん DB なしでチャレンジしても良いと思うが、DB が必要になる可能性があるという前提で進んだほうが良さそう。

という判断が付いたのでクローズする。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant