見出し画像

noteのシステム設計プチ考察

はじめに

ふと、noteの通知やダッシュボードのPV記録などはどうやってるのか気になったので、プチリバースエンジニアリングもどきをしてみようと思う


noteのテーブル定義

多分ざっくりこんなテーブル持ってると思う

  • アカウントテーブル

  • 記事(コンテンツ)テーブル

  • 売上テーブル

  • PVテーブル、他

  • 通知テーブル

滅茶苦茶ざっくりかいた
ここで注目したいのは、PVテーブルと通知テーブル
なんかここの挙動、不思議だなとおもったので、ここを掘り下げてみたい


PVはバッチ処理?

まず、アカウントを持っていて、記事を書いてる人には同じみのダッシュボードだが、このダッシュボードは最新集計時刻というのがある

ということはバッチ処理か何かで集計しているのだろうという予測がたつ

まずそもそも、記事に対するビュー数やコメントやスキ数のデータを保存する際は、普通記事テーブルに対してリレーションを取ったPVテーブルや、コメントテーブル、スキ数テーブルを持っているはずである

なので、アクセス記録を見に行きたければ、リクエストがある毎に、この3つのテーブルを走査して、記事ごとのビュー数、コメント、スキ数を集計したらいいと思われる

しかし、リクエスト毎に集計していたらサーバーに負荷がかかるのと、頻繁に計算処理をさせる必要性もない処理だろうから、定期的に(どのようなタイミングで動くかは不明だが)、バッチ処理などを使って集計結果を出力し、PVテーブルに格納しているのだろう

そしてユーザーは自身のアクセス状況のデータを見る際はこの集計済みのPVテーブルを見に行っているのだろう

こうやってサーバーの負荷を減らしているのだろう

ただ、PVテーブルは1週間単位でアクセス記録をさかのぼることが出来て、なおかつ、1日ズレると集計日のさかのぼりも一日ずつズレていくので、こちらの処理ってどうやっとるんだと思ったりする
まさか、毎回集計処理をしていることはないと思うので、集計済みのデータを1週間単位でさかのぼって持っているのだろうか
すごくややこしいデータの持ち方になりそうだなと思ったりするが、こうやって作ってるのは勉強になるなーという気持ちである


note通知はこうや

noteの通知、不思議な挙動があるなと思うので、ちょっと考察したい

noteのコメントの通知だが、まず誰かの記事に対してコメントをして、筆者が返信したら通知が来るのはみなさんご存知かと思う
ただ、別の人の返信に対しても通知が行ってしまうので、見に行ってなんや自分に対する返信やなかったのかとがっかりしたひとも多いのではないかと思う
しかし、どうやら筆者が以下のように書くと、メンションとなって、○○さんにのみに通知をかけることが出来るようなのである

○○さん
(改行)
~~~本文~~~

このフォーマット、地味にすごい手間がかかってそうだと思ったので考察したい

まず、筆者以外のコメントは筆者にのみ通知を送ればいいので、この処理はシンプルだ
しかし、筆者がコメントしたとき、誰に通知を送ればいいかはこのフォーマットによって決まっている

だから筆者がコメントしたときは、このフォーマットに沿っているかどうか見ないといけないだろう
1行目の二文字がさんで終わってるかどうかをまず見る
さんで終わっていたら次に、その左側の文字が、今までコメントしてきたアカウント名のどれかに一致しているかを確認する
例えば、AさんBさんCさんがコメントして来ていたら、A, B, Cというリストを持っておいて、○○の文字列がこのリストのどれかに一致しているかを確認しにいく
もしAに一致していたら、晴れて、Aさんに対してのみ通知を送るという処理を行う
もしこの処理の中でこのフォーマットに一致していなければ、A,B,Cのリストにいる全員に通知を送る

そういう処理になっているのだろう

多分コードで書いてるのだろうが、結構コード量が増えてコードがゴチャつくから、ぶつぶつ言ってる人がいそうである

なんとなくの感覚であるが、どうだろう

個人的には、@とか使わせてほしいなと思ったりする


おわりに

今日はこんなところで終わる
ちなみに、すごい適当なこと言ってるので間に受けないでくださいね

それでは

いいなと思ったら応援しよう!

DIEKITCHEN(DEVIL HUNTER👿 & EVIL COOK🔥) 私へのチップが世の中の婚活者を救う助けとなるでしょう(よりアツい婚活者向け啓蒙活動を行います)