お知らせ『1月31日に一度初期化したいと思います。』 (他のお知らせを読むにはここをクリック)

並び順: 階層 時系列

0
+37
(・_・)bookbook[1.29 20:20]
タイムラインってどう作るのがいいんだろう?
1
(・_・)bookbook[1.29 20:22]
フォローしてるユーザーの発言を、いっこいっこ集めてくるのかな?
2
+28
(・_・)えりにー◆eriniEpDjI[1.29 20:23]
現状の仕様であれば、DBを使用したチャットを例に考えてみると分りやすいんじゃないかな。
3
+27
(・_・)bookbook[1.29 20:26]>>2
全部の発言拾うなら、時系列ソートして表示するだけだから簡単だけど、そっからフォローしてるひとの発言だけ!ってなると処理面倒くさくない?
5
(・_・)えりにー◆eriniEpDjI[1.29 20:28]>>3
その処理を上手く組めればクールに出来ると思うけど、残念ながら俺はプログラマじゃないからそれ以上詳しいことは言えない!歯がゆい!
6
+24
(・_・)しらちゃ[1.29 20:29]>>3
SQLなRDBMS使っているなら,フォローしてるユーザと,直近の発言リストを直積して,ユーザIDの同値をつかって選択するだけではないでしょうか?
10
+23
(・_・)bookbook[1.29 20:31]>>6
それって例えばフォローユーザー数が1000とか行っても、重たい処理にはならない?
15
+3
(・_・)しらちゃ[1.29 20:51]>>10
ところで,じんくすさんがさっき書いてた「結合」のコードと,私の言ってた上の話は,全く同じことだったりします.せっかくなので,私からは,理論の話しをしてみますネ.
24
(・_・)テスト中につき反応鈍し◆JINX.xzK8k[1.29 20:59]>>15
非常に興味深い
32
+1
(・_・)bookbook[1.29 21:07]>>15
なんかDBって今まで知らないような考え方をするから、理論的な話題はすごく勉強になる。ありがと。
34
(^-^)しらちゃ[1.29 21:09]>>32
いえいえ.とりあえず,以上なのです.長文失礼でしたー.
16
(・_・)しらちゃ[1.29 20:52]>>10
2つのテーブルがあるときに,その2つのテーブルを,共通するフィールドを使って,新しいテーブルを得る演算(データベースの計算)は「結合」,と呼ばれています.
17
(・_・)しらちゃ[1.29 20:53]>>10
この結合は,3段階に分解できることが知られています.その三段階は,それぞれ,「直積」「選択」「射影」という名前が付いています.
18
+1
(・_・)しらちゃ[1.29 20:54]>>10
「直積」は,1つめのテーブルの,レコードに対して,もう1つのテーブルの,レコードを,全部くっつけてみる計算です.たとえば1, 2, 3がそれぞれレコードであるテーブルとa, b, cがそれぞれテーブルであるレコードがあるなら……
36
(・_・)しらちゃ[1.29 21:16]>>18
ちなみに,直積を取ると,元のテーブルが大きいと,もの凄く大きなテーブルになります.なので,計算量を減らしたければ「直積する前に」十分テーブルを削る事が大事になります.たとえばLinenであれば,メッセージは時系列的に不要な物は始めに全部カットしてから,結合を行うべきでしょう.
19
+2
(・_・)しらちゃ[1.29 20:55]>>10
1a, 1b, 1c, 2a, 2b, 2c, 3a, 3b, 3cというテーブルを作るのが,直積です.
21
+1
(・_・)bookbook[1.29 20:58]>>19
へー、そんなことも出来るのか。そのテーブルは一時的なものとして作れるの?
23
(・_・)しらちゃ[1.29 20:59]>>21
はい,そのとおりです.一時的に作られます
20
(・_・)しらちゃ[1.29 20:57]>>10
「選択」は,あるテーブルの中にある,レコードのうち,条件を満たすようなものを,抽出してくる計算です.たとえば,先ほど直積で作ったテーブルで,数字が2以下のもの,という「選択」をすると,1a,1b,1c,2a,2b,2cというテーブルが得られます.
22
+4
(・_・)しらちゃ[1.29 20:58]>>10
最後に,「射影」というのは,あるテーブルのうち,ある種類のフィールドだけを抜き出して,テーブルを作る計算です.さきほどの射影で作ったテーブルのうち,数字だけを抜き出す射影をすると,1, 2というテーブルになります.
25
+3
(・_・)テスト中につき反応鈍し◆JINX.xzK8k[1.29 21:00]>>22
つまりさっき自分が書いたコードは選択と射影ということか!・・・たぶん
27
+2
(・_・)しらちゃ[1.29 21:01]>>25
いえ,直積・選択・射影の全部をやっていますよ.
28
+1
(・_・)テスト中につき反応鈍し◆JINX.xzK8k[1.29 21:02]>>27
selectの結果にmしか含まれてなくても、whereで使ったらなるのか
29
(・_・)テスト中につき反応鈍し◆JINX.xzK8k[1.29 21:02]>>28
なるほど
26
(・_・)しらちゃ[1.29 21:01]>>10
この3つを組み合わせると,任意のテーブルの「結合」が行えます.つまり,まず結合したい二つのテーブルの直積を作る,次に,共通してほしいフィールドが,同じかどうかで比較して選択をする,最後に,不要なフィールドを省くために,射影する.
30
+1
(・_・)しらちゃ[1.29 21:04]>>10
このそれぞれの演算ですが,SQLでは,直積を取るのに,whereという構文を,選択を取るのに,fromと言う構文を,射影を取るのにselectという構文を使います.
35
( ´_ゝ`)しらちゃ[1.29 21:12]>>30
訂正.直積を取るのにfrom,選択を取るのにwhere,射影を取るのにselect...
31
+2
(^-^)しらちゃ[1.29 21:05]>>10
それぞれの使い方は,普段ご理解なされてる物で,よいです.ただ,それぞれの構文のとらえ方として,この直積・選択・射影という物を思い出してみて下さい.よいSQL文を書くことに,繋がりますよ.
33
+1
(^-^)テスト中につき反応鈍し◆JINX.xzK8k[1.29 21:08]>>31
一回勉強したとこだけど、すっかり忘れてたから復習になって良かった!w
37
(^-^)しらちゃ[1.29 21:17]>>33
それはよかったのですー.
8
(・_・)しらちゃ[1.29 20:30]>>3
もちろん,どういう風にRDBMSに格納しているかにも依存してきますけれども.
4
+1
(・_・)えりにー◆eriniEpDjI[1.29 20:26]
原始的な構造だと、その上で条件分岐でフォローしてないユーザーなら表示しない、フォローしてるユーザーなら表示させる、とかになるんだろうけど、もっと上手いやり方はいくらでもあると思う。
7
(・_・)bookbook[1.29 20:29]>>4
ユーザー数や発言数が増えてくとえらいことになりそうだしね。何か上手いやり方あるよね。
9
+4
(・_・)テスト中につき反応鈍し◆JINX.xzK8k[1.29 20:31]
SQLで結合?とか?そういう話ではなく?
11
+3
(・_・)bookbook[1.29 20:32]>>9
結合ってなにー?
12
+2
(・_・)テスト中につき反応鈍し◆JINX.xzK8k[1.29 20:33]>>11
Linenでの例で良いのかな?
13
+1
(・_・)bookbook[1.29 20:33]>>12
うん。教えてくれると助かる。
14
(・_・)テスト中につき反応鈍し◆JINX.xzK8k[1.29 20:34]>>13
じゃあこっちでmessage/15157