Code Monkey home page Code Monkey logo

Comments (6)

koi-chan avatar koi-chan commented on September 23, 2024

雑ですがラフを描いてみました。
https://cloud.githubusercontent.com/assets/8256803/25928938/fa774b30-3639-11e7-9f2a-db45cdd5e96d.jpg

from log-archiver.

ochaochaocha3 avatar ochaochaocha3 commented on September 23, 2024

ありがとうございます!絵があるとやはり分かりやすいです。
タブの名前については、

┌─────┬──────┬─────┐
│ 日付 │ 期間 │ 検索 │
┴─────┴──────┴─────┴────

のようにすると機能と合うのではないかと思いましたが、いかがでしょうか。

from log-archiver.

koi-chan avatar koi-chan commented on September 23, 2024

はい、それでいいと思います。

from log-archiver.

ochaochaocha3 avatar ochaochaocha3 commented on September 23, 2024

少し考えてみたのですが、1ページのメッセージ数を決める(1000メッセージごと等)のが意外と難しいことが分かりました。検索画面では1つのテーブルから読み込んでいるので問題ないのですが、すべての種類のメッセージを表示する場合は2つのテーブルから読み込まなければならないので、単純にページを指定する操作ができません。

2つのテーブルから読み込むために難しくなっていることとして、メッセージのタイムスタンプによるソートもあります。実は現在の1日分のログのページではタイムスタンプによるソートはちょっと手を抜いて組んでいます(SQLで行わず、常に通常のメッセージ→会話のメッセージとなるようにRuby側で行っている)。

根本的な解決のためには、通常のメッセージと会話のメッセージの両方を格納するテーブルの追加が必要です。これがなかなか難しく、どのような形にしようか迷っています。最小ならば、順番保持のためのid・種類(messageかconversation_messageか)・参照先のidでいいはずですが、タイムスタンプをどちらに入れれば良いか等が難しいです。

from log-archiver.

koi-chan avatar koi-chan commented on September 23, 2024

1ページ数の最大メッセージ数については、実装が難しいようなら省いても良いと思います。
単にDBの負荷が高くなりすぎると困るというだけなので、例えば会話メッセージだけで800件+その間のその他のメッセージ全て、というような実装でもいいですし。
実際の件数ですが、1000件だと1日分の会話メッセージだけで超えることがあるようです。負荷的にもまだ余裕があると思いました。
2000・3000……と実験して上限数を決めたいと思います。
もしくは設定で決められるようにしておいても良いかもしれません。

タイムスタンプによるソートについて。
両方のメッセージを一括して保存するテーブルを作るのであれば、タイムスタンプはそれぞれのメッセージの方に保存するのが良いと思います。
それなら今までの実装を変えなくてもいい(つまり統合テーブルと結合させる必要が無い)からです。

from log-archiver.

koi-chan avatar koi-chan commented on September 23, 2024

MessageSearch モデルを下敷きに、チャンネル名・日時範囲だけで ConversationMessage の検索を行なうモデルを作成します。
ConversationMessage だけの結果を基にページ分割した後、そのページの最初と最後のメッセージの日時から Message を検索し、両方の結果をソートして表示させるつもりです。

ただ、各ページ最後と次のページ最初の ConversationMessage の間に出力されるはずの Message が表示できなくなるので、その部分をどう工夫するかをまた考えたいと思います。

from log-archiver.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.