Comments (6)
雑ですがラフを描いてみました。
https://cloud.githubusercontent.com/assets/8256803/25928938/fa774b30-3639-11e7-9f2a-db45cdd5e96d.jpg
from log-archiver.
ありがとうございます!絵があるとやはり分かりやすいです。
タブの名前については、
┌─────┬──────┬─────┐
│ 日付 │ 期間 │ 検索 │
┴─────┴──────┴─────┴────
のようにすると機能と合うのではないかと思いましたが、いかがでしょうか。
from log-archiver.
はい、それでいいと思います。
from log-archiver.
少し考えてみたのですが、1ページのメッセージ数を決める(1000メッセージごと等)のが意外と難しいことが分かりました。検索画面では1つのテーブルから読み込んでいるので問題ないのですが、すべての種類のメッセージを表示する場合は2つのテーブルから読み込まなければならないので、単純にページを指定する操作ができません。
2つのテーブルから読み込むために難しくなっていることとして、メッセージのタイムスタンプによるソートもあります。実は現在の1日分のログのページではタイムスタンプによるソートはちょっと手を抜いて組んでいます(SQLで行わず、常に通常のメッセージ→会話のメッセージとなるようにRuby側で行っている)。
根本的な解決のためには、通常のメッセージと会話のメッセージの両方を格納するテーブルの追加が必要です。これがなかなか難しく、どのような形にしようか迷っています。最小ならば、順番保持のためのid・種類(messageかconversation_messageか)・参照先のidでいいはずですが、タイムスタンプをどちらに入れれば良いか等が難しいです。
from log-archiver.
1ページ数の最大メッセージ数については、実装が難しいようなら省いても良いと思います。
単にDBの負荷が高くなりすぎると困るというだけなので、例えば会話メッセージだけで800件+その間のその他のメッセージ全て、というような実装でもいいですし。
実際の件数ですが、1000件だと1日分の会話メッセージだけで超えることがあるようです。負荷的にもまだ余裕があると思いました。
2000・3000……と実験して上限数を決めたいと思います。
もしくは設定で決められるようにしておいても良いかもしれません。
タイムスタンプによるソートについて。
両方のメッセージを一括して保存するテーブルを作るのであれば、タイムスタンプはそれぞれのメッセージの方に保存するのが良いと思います。
それなら今までの実装を変えなくてもいい(つまり統合テーブルと結合させる必要が無い)からです。
from log-archiver.
MessageSearch モデルを下敷きに、チャンネル名・日時範囲だけで ConversationMessage の検索を行なうモデルを作成します。
ConversationMessage だけの結果を基にページ分割した後、そのページの最初と最後のメッセージの日時から Message を検索し、両方の結果をソートして表示させるつもりです。
ただ、各ページ最後と次のページ最初の ConversationMessage の間に出力されるはずの Message が表示できなくなるので、その部分をどう工夫するかをまた考えたいと思います。
from log-archiver.
Related Issues (20)
- インストールドキュメントの整備
- Ruby 3.0でdb:migrateできない
- Ruby 3:Sorceryが原因で落ちる
- Ruby3:AppStatusのテストが落ちる
- bootstrap3-datetimepicker-railsの代替品を使う
- コントローラ・アクションとビューが対応しない場合にJavaScriptが動作しない HOT 1
- Rack アプリケーションサーバを Unicorn から Puma へ移行する
- 期間指定検索:メッセージのフィルタ機能を追加する HOT 1
- 「現在の状態」ページに稼働時間が正確に表示されない HOT 3
- JavaScriptのCookie操作ライブラリを移行する HOT 2
- npmパッケージのchart.jsを使う
- JavaScriptのエントリポイントを減らす
- IRCボット:シグナルハンドラのバグ
- 管理画面:「非表示の発言」を表示できない
- Ruby 2.6以下のサポートを落とす
- mIRC 装飾とURL自動リンク化の併用
- MroongaのDockerイメージ更新が原因でテストに失敗する
- transactionを削除する
- webpacker を削除する HOT 1
- sidekiq を 7.x 系列へ更新すると、テスト個別のRedis接続情報を使用できずテストに失敗する
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from log-archiver.