3,600 億の 1 グラムを各ペアまたは 2 つ以上のグループごとに何度も格納するよりも (単語を 1 回格納してから、より小さな整数を使用して単語を表す方が良い選択のように思えます)。
(以下に見積もりをまとめました。)
ここで整数がより良い選択であるとは断言できません。必要なディスク容量、所有しているディスク容量、余裕のあるディスク容量をより適切に見積もる必要があります。
統計によると、英語の単語の平均の長さは 5.1 文字です。アプリでは、これは 5.1 バイトと同じです。2 つの単語の平均の長さは約 10.2 バイトです。2 つの整数の長さは 8 バイトです。
ファイル番号 71 (ランダムに選択) には、約 6600 万個の 2gram があります。1 エントリあたり 10.2 バイトなので、このファイルのサイズは約 673 MB です。(これは、カウントではなく、単語のみを保存することを前提としています。) 100 個の 2 グラムのファイルの場合、52 から 67 ギガが必要になるはずです (インデックスは無視します)。私たちの深い無知のために 50% を追加します。100 ギガで 2 グラムをカバーします。
カウントを単語で保存すると、このファイルは 1.6 ギガで、そのうち 100 個は約 160 ギガになるはずです。したがって、2 グラムを保存するために 100 から 160 ギガの範囲があります。
インデックスに必要なスペースの見積もりはあなたに任せます。
整数は、1 ワードあたり 2.2 バイト節約されます。ただし、2 つの整数を格納すると、実際のデータを取得するには常に2 つの結合を行う必要があります。(5 グラムに対して 5 つの整数を格納するということは、実際のデータを取得するために5 つの結合が必要になることを意味します。) 単語自体を格納する場合、実際のデータを取得するために結合は必要ありません。
カウントも格納する場合は、個々の単語を使用する代わりに外部キーを ngram に格納することでスペースを節約できます。収納できるので
ngram_id ngram_text
--
143564 five pounds
1 つのテーブルで、
ngram_id year match_count page_count volume_count
--
143564 1999 4 3 3
143564 2000 2 2 1
143564 2001 1 1 1
143564 2002 1 1 1
143564 2003 2 2 2
143564 2004 1 1 1
143564 2005 6 6 5
143564 2006 30 21 17
143564 2007 39 37 26
143564 2008 44 41 28
別の。
その特定の 2gram の場合、テキストは 11 バイト、整数は 4 になります。10 行のそれぞれで 7 バイト、70 バイトが節約されます。実際のデータを取得するには、 1 つの結合が必要です。このアプローチでは、インデックスと外部キーを提供するテーブルを除いて、すべての 2 グラムに対して約 130 ギガを見積もっています。
6,600 万行のファイル 100 個に基づいて、2 グラムを格納するために必要な容量を概算しました。インデックス用のスペースと一般的なストレージ オーバーヘッドを除外します (dbms によっては、かなりの量になる可能性があります)。
row_len gigabytes joins
----------------------------------------------------
words with counts 163.2 1,077 0
two integers with counts 128.0 845 2-5
words without counts 10.2 67 0
two integers without counts 8 53 2-5
one integer with counts 20 132 1
one integer without counts 4 26 (for completeness, but not really useful)
最近では、数テラバイトのドライブ アレイはそれほど高価ではありません。これでみんな稼げるの?