[前][次][番号順一覧][スレッド一覧]

mysql:6258

From: "kosugi" <"kosugi" <kosugi@xxxxxxxxxx>>
Date: Sat, 21 Sep 2002 05:18:45 +0900
Subject: [mysql 06258] Re: スレッド式掲示板のテーブル構造について

小杉です


> 神崎です。
>
(中略)

> 10000.50000.40000
> だと
> xxxx1xxxx5xxxx4
> ということですか?
> これだとxxxx1xxxx5xxxx4のような桁数が255を超えた場合はやはり足
りなくなりますよね?
> しかも15686のような数値はどのように表しますか?
> もしかして私の認識間違ってます?
>
>


桁数としては、char(255)じゃなくて、textにするとかなり融通が利きま
す。それでも私は、順序キーはcharの方が向いていると考えていますの
で、フィールドの桁数がオーバーフローしたときのために、オーバーフ
ローした分を次のフィールドで吸収するように設計します。スレッド毎
に新しいnoが振られるのでmsgNoを順序キーに当てていくケースに比べ
て、巨大な数字が振られることはまずないのですが、私の推薦する記法
ですと、莫大な数字でも、問題はありません。


便宜的に、記法を理解しやすくするために10進で示してみましたが、
もし10=Xだけを使うと、

10000=xxxxxxxxxxxxxxxxxxxxxxxx..............snip..........xxxxxxx
x0
となります。
これでは、使い物になりません。
#ちなみに、10進でxxxx1xxxx5xxxx4は、41.45.44です
この意味は、スレッドに対して41個目のレスで、それに対するレスの
45個目のレスにでさらにそれに対して44個のレスがついた状態で
す。

しかし、この記法は、さらに応用することが出来て、30進数+桁添字
5字で同じことが出来ます。
0は特殊な意味がありますので1から始めて
1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g...........t
までを進数として
u=30
v=120
w=360
x=1080
y=3240
z=9720
の添字とします

すると、15686は
zyxxwvuuq
となります。1〜tとu〜zは意味が違うのでそこが切れ目になります。

では、
zzyyxwvu5xxwvucxxugyywwvvt
これも一意に10進数とdotの並びに変換できます。
しかも、ソートに対しても矛盾はありません。
#これは、ひとつのスレッドに対して約20000のレスがつき、そのレスに
約2500のレスがつき、さらに、約2500レス、約10000レスがついたという
ケースでの順序キーです。

このように、記法的には無制限に対応できます。
これは、あくまでも例ですので、運用に合わせて進数と添字を調整する
べきですが。
進数をもっと増やして、添字の精度をあげると圧縮効果はかなり高いで
す。

ただ、この記法に頼るのではなく、階層が深くなった場合と、スレッド
内のメッセージ数が莫大になったときの対策はもっとスマートな方法が
必要です。この記法の最大のパフォーマンスは10〜500レスぐらい
とおもわれますので、それ以上を想定して例外処理を加えておく必要が
あるでしょう。

例えば、
ひとつのスレッド内でレスの数が莫大になるケース、階層がやたら深く
なるケース、またはその両方があると思いますが、自動的にtreeそのも
のをネストするなどの対策をとります。treeが分岐する元になるメッ
セージを検出してそこをネストの元とします。
(ネストフラグ用のフィールドを用意します)

人によってはこういう例外処理を嫌う方もいますが、このケースでは早
めに例外を発生させてそれを適切に処理する方法の方が向いていると感
じています。
なぜなら、無限に増え続ける可能性があるものに対して、有限の桁数で
対応しようとしているわけですから、例外処理で有限の問題を回避する
処理はどのみち必要です。こういうケースでは、単純なテーブルとロ
ジックで致命的な例外が生じるよりは、早めに例外を発生させて処理す
る仕組みを準備するほうが向いています。




--
Tomoaki Kosugi
kosugi@xxxxxxxxxx




[前][次][番号順一覧][スレッド一覧]

      6207 2002-09-18 19:27 [Tybalt of Capulet <i] スレッド式掲示板のテーブル構造について  
      6208 2002-09-18 19:36 ┣[荒井 哲三 <tetsumi.]                                       
      6209 2002-09-18 19:45 ┣[Yuya.Nishida. <yuya@]                                       
      6210 2002-09-18 20:23 ┃┗[Tybalt of Capulet <i]                                     
      6211 2002-09-18 20:33 ┃ ┣[Tomohiro 'Tomo-p' KA]                                   
      6213 2002-09-18 20:41 ┃ ┣["Kaigai Kohei" <kaig]                                   
      6214 2002-09-18 20:49 ┃ ┣[Yuya.Nishida. <yuya@]                                   
      6216 2002-09-18 20:54 ┃ ┗[Takanori Tobe <taka@]                                   
      6212 2002-09-18 20:37 ┣[NAGASAWA Teruo <ml@x]                                       
      6217 2002-09-18 21:16 ┣[HAMAI Kyoichi <k-ham]                                       
      6225 2002-09-19 03:20 ┃┗["umemura" <shigemi.u]                                     
      6218 2002-09-18 21:17 ┣["KAWAI,Takanori" <GC]                                       
      6219 2002-09-18 21:33 ┃┗[Tomohiro 'Tomo-p' KA]                                     
      6220 2002-09-18 22:02 ┃ ┗["KAWAI,Takanori" <GC]                                   
      6222 2002-09-18 22:14 ┃  ┣["黒木 玲" <kuroki434]                                 
      6223 2002-09-19 01:02 ┃  ┃┗[Tybalt of Capulet <i]                               
      6224 2002-09-19 03:16 ┃  ┃ ┣[<rio-t@xxxxxxxxxx>  ]                             
      6227 2002-09-19 07:15 ┃  ┃ ┃┣["kosugi" <kosugi@xxx]                           
      6228 2002-09-19 09:32 ┃  ┃ ┃┃┗["Takashi Yamashita" ]                         
      6229 2002-09-19 10:06 ┃  ┃ ┃┗[Tybalt of Capulet <i]                           
      6230 2002-09-19 10:21 ┃  ┃ ┃ ┗["黒木 玲" <kuroki434]                         
      6232 2002-09-19 11:01 ┃  ┃ ┃  ┗[Toyoshima Hiroshi <t]                       
      6233 2002-09-19 11:33 ┃  ┃ ┃   ┗[Tomohiro 'Tomo-p' KA]                     
      6236 2002-09-19 12:26 ┃  ┃ ┃    ┗[Toyoshima Hiroshi <t]                   
      6237 2002-09-19 12:52 ┃  ┃ ┃     ┗[HAMAI Kyoichi <k-ham]                 
      6231 2002-09-19 10:46 ┃  ┃ ┗["KAWAI,Takanori" <GC]                             
      6234 2002-09-19 12:18 ┃  ┗[<n.futami@xxxxxxxxxx]                                 
      6238 2002-09-19 13:52 ┃   ┣["kosugi" <kosugi@xxx]                               
      6247 2002-09-20 11:50 ┃   ┗[Tybalt of Capulet <i]                               
      6248 2002-09-20 12:53 ┃    ┣[Yuya.Nishida. <yuya@]                             
      6249 2002-09-20 13:21 ┃    ┃┗["KAWAI,Takanori" <GC]                           
      6252 2002-09-20 13:59 ┃    ┃ ┗[Yuya.Nishida. <yuya@]                         
      6251 2002-09-20 13:51 ┃    ┣["KAWAI,Takanori" <GC]                             
      6255 2002-09-20 22:53 ┃    ┗["kosugi" <kosugi@xxx]                             
      6257 2002-09-21 02:31 ┃     ┗[Tybalt of Capulet <i]                           
->    6258 2002-09-21 05:18 ┃      ┗["kosugi" <kosugi@xxx]                         
      6259 2002-09-21 08:18 ┃       ┣["黒木 玲" <kuroki434]                       
      6260 2002-09-21 09:40 ┃       ┗["KAWAI,Takanori" <GC]                       
      6261 2002-09-21 11:16 ┃        ┗["kosugi" <kosugi@xxx]                     
      6262 2002-09-21 11:46 ┃         ┗["kosugi" <kosugi@xxx]                   
      6221 2002-09-18 22:10 ┣["kosugi" <kosugi@xxx]                                       
      6226 2002-09-19 06:39 ┃┗["kosugi" <kosugi@xxx]                                     
      6235 2002-09-19 12:25 ┣[You2 <ml-mysql@xxxxx]                                       
      6239 2002-09-19 15:01 ┗[平松 幸治 <kouji@xx] OR と AND を複数使った検索で・・・    
      6240 2002-09-19 15:09  ┣[平松 幸治 <kouji@xx]                                     
      6243 2002-09-19 15:35  ┃┗[平松 幸治 <kouji@xx]                                   
      6244 2002-09-19 16:34  ┃ ┗["Takashi Yamashita" ]                                 
      6250 2002-09-20 13:40  ┃  ┗[平松 幸治 <kouji@xx]                               
      6241 2002-09-19 15:16  ┣[SAKIMURA Noriyuki <s]                                     
      6242 2002-09-19 15:16  ┗[Daiju Azuma <daiju_a]