0

大きなテキストを 1 つだけメモリにロードせずに、ディスクに保存する方法が必要です。

私のクエリは、次のようなテキストのスパンの形式になっています: 位置 x と位置 x + n の間のすべてのテキストを教えてください。それ以上でもそれ以下でもありません。テキストを頻繁に変更することはありません。

おそらく、「永続的な」Bツリーのようなものが必要です。

また、次のようないくつかの DBMS 機能も必要になります。

  • クライアント/サーバー アーキテクチャ
  • キャッシュシステム

ありがとう

4

1 に答える 1

0

また、次のようないくつかの DBMS 機能も必要です。

では、なぜ DBMS を使用しないのでしょうか。または、OrientDB のようなクエリ機能を備えた NoSQL ソリューションでさえありますか?

このようなことができると思います。

  1. テキストをチャンクに分割します (章? 段落? 固定サイズ?)
  2. (少なくとも) 3 つのフィールドを持つテーブルにテキストを保存します。
    TEXT (テキストのチャンク)
    BEGIN (全文の先頭からのこのチャンクのオフセット)
    END (全文の先頭からのこのチャンクの終了オフセット)

これで、クエリを記述して、位置 x と位置 x+n の間のテキストを抽出できます。

SELECT TEXT, BEGIN END  
  FROM TEXT_TABLE  
 WHERE END >= x  
   AND BEGIN <= (x+n)  
ORDER BY BEGIN

最後
に、次のような方法でテキストを抽出するだけです

n-BEGIN))

明らかに、「エッジ ケース」にも注意する必要があります (1 行または 2 行のみの結果、要求されたスパンが範囲外など)。
しかし、このアプローチはあまり労力をかけずに問題を解決するはずだと思います。

それが役に立てば幸い。
さようなら、
ラフ

于 2013-02-16T16:59:54.597 に答える