私はおそらくこれについて間違っていると考えていますが、ここに行きます。
コンピューターは、1111111111111111111 から 99999999999999999999 までの無数の乱数を直線的に吐き出します。
- コンピューターが線の一端に数字を追加することがあります。
- コンピューターが回線の反対側に番号を追加することがあります。
- 各番号には、前に来る、または来る番号があります。
- 各番号には、後に来る、または来る番号があります。
- すべての数字が一意であるとは限りません。ほとんどではありませんが、多くの数字が繰り返されます。
- コンピューターは数字の吐き出しを止めません。
これらの数字をすべて記録するとき、いつでも知識に基づいて推測できるようにする必要があります。
ある数字を見たのがこれで 2 回目である場合、前回その数字の前にあった数字を知っている必要があります。
それが 2 回以上現れた場合、その前にある数字の確率/頻度を知っている必要があります。
数字を見たのがこれが 2 回目である場合は、前回、その次に並んだ数字も知っている必要があります。
それが 2 回以上表示されている場合は、その後に続く数字の確率/頻度を知っている必要があります。
これらすべての数値を格納するために、MySQL データベースのテーブルをどのように構築すればよいのでしょうか? 使用するエンジンとその理由 クエリを作成するにはどうすればよいですか? 私はすぐに知る必要がありますが、容量も重要です。
私の思いがけない計画:
2 テーブル:
1. Unique ID/#
2. #/ID/#
私の考え:
ほとんどの場合、一意の ID は数字よりも短いため、一致が速くなります。数字が繰り返される = ID 行が少ない = 最初の一致が速くなります。
Select * in table2 where id=(select id in table1 where #=?)
また:
3 テーブル:
1. Unique ID/#
2. #/ID
3. ID/#
私の考え:
左/前のみが必要な場合、または後/右のみが必要な場合は、2番目のクエリのサイズを縮小します。
SELECT # IN table2(or 3) WHERE id=(SELECT id IN table1 WHERE #=?)
また
1 テーブル:
1. #/#/#
考え:
少ないクエリ = 少ない時間。
SELECT * IN table WHERE col2=#.
私は道に迷いました.... :( 各数値には 4 つの属性があります。前に来るものは + 頻度、後に来るものは + 頻度です。
そういう風に考えたほうがいいのでしょうか?テーブルに頻度を保存してインクリメントすると、繰り返しがなくなり、クエリが高速化されますか? 私は当初、すべての発生を保存すると、プログラムで頻度を計算する方が速いと考えていました........
このような単純なデータですが、データベースがどのように機能してどちらがより効率的かを知る方法についての知識がありません。
最近のコメントに照らして、実際の問題について少し情報を追加したいと思います。長さが不定の文字列があります。この文字列に、さまざまな文字または文字のチャンクのマルコフ連鎖頻度表を格納しようとしています。
文字列内の任意のポイントが与えられた場合、次の状態の確率と前の状態の確率を知る必要があります。
テキストのコーパスと過去のユーザー入力に基づいて、ユーザー入力を期待しています。私が見た他のアプリケーションとの主な違いは、特定の時間にチェーンをさらに下って、より多くの状態に移動し、複数の可能性を提供するために周波数データが必要であることです。
それが絵をより明確にすることを願っています。問題の核心には入りたくありませんでした。過去に、特定の答えを得るには具体的ではない質問を作成したからです。
これは多分少し良いようです。このソリューションに関する私の主な質問は次のとおりです。「キー」(状態の最初の数文字) を提供すると、システムの速度が向上しますか? つまり、state_key をクエリしてから、完全な状態のクエリの結果のみをクエリしますか?
Table 1:
name: state
col1:state_id - unique, auto incrementing
col2:state_key - the first X characters of the state
col3:state - fixed length string or state
Table 2:
name: occurence
col1:state_id_left - non unique key from table 1
col2:state_id_right - non unique key from table 1
col3:frequency - int, incremented every time the two states occur next to each other.
QUERY TO FIND PREVIOUS STATES:
SELECT * IN occurence WHERE state_id_right=(SELECT state_id IN state WHERE state_key=? AND state=?)
QUERY TO FIND NEXT STATES:
SELECT * IN occurence WHERE state_id_left=(SELECT state_id IN state WHERE state_key=? AND state=?)