問題タブ [random-access]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
compression - マルチパート gzip ファイルのランダム アクセス (Java で)
これは、「実現不可能」または「努力する価値がない」の領域に入る可能性がありますが、ここでは説明します。
マルチパート gzip ファイル内に保存されているレコードにランダムにアクセスしようとしています。具体的には、私が興味を持っているファイルは、圧縮されたHeretrix Arc ファイルです。(マルチパート gzip ファイルに慣れていない場合は、gzip 仕様により、複数の gzip ストリームを単一の gzip ファイルに連結できます。それらは辞書情報を共有せず、単純なバイナリの追加です。)
ファイル内の特定のオフセットを探し、gzip マジック ヘッダー バイト (つまり、RFCに従って 0x1f8b) をスキャンし、次のバイトから gzip ストリームを読み取ろうとすることで、これを実行できるはずだと考えています。 . このアプローチの問題は、同じバイトが実際のデータ内にも現れる可能性があることです。そのため、これらのバイトを探すと、gzip ストリームの読み取りを開始する位置が無効になる可能性があります。レコード オフセットがアプリオリに知られていない場合、ランダム アクセスを処理するより良い方法はありますか?
sql - SQLite - ORDER BY RAND()
MySQL では RAND() 関数を使用できますが、SQLite 3 に代替手段はありますか?
c# - これらのオブジェクトをシリアル化できないのはなぜですか?
オブジェクトをランダムアクセスファイルにシリアル化できないのはなぜですか?一方、オブジェクトをシーケンシャルアクセスファイルにシリアル化できますか?
"" C#は、実行時にオブジェクトのサイズを取得する手段を提供しません。これは、クラスをシリアル化した場合、固定長のレコードサイズ ""(私が読んだ本から)を保証できないことを意味します。
したがって、ファイル内のすべてのオブジェクトサイズがわからないため、ランダムアクセスファイルを読み取ることができません。
java - ランダムアクセスキューの実装を提供するJavaライブラリはありますか?
Javaで、イベントのストリーム上にスライディングウィンドウを実装しています。したがって、次のことを実行できるデータ構造が必要です。
新しいイベントが発生したときにデータ構造の最後に追加します。
古いイベントが処理されるときにデータ構造の先頭から削除します。
データ構造の要素への標準のランダムアクセス(
size()
、 )を取得します。get(i)
一般に、一般的なリストの「読み取り」操作。上記のすべての操作に効率的です。
無制限です。
他のアクセスは必要ありません。また、スレッドセーフは必要ありません。
私は現在、物事を稼働させるために、 ArrayListを使用してこれを行っています。しかし、私はもっと効率的なものが欲しいです。方法(上記のremove(0)
2.)は、。を使用すると非効率的ArrayList
です。
番号1と2は、標準のキュースタイルの操作です。ただし、Queue
JDKでの実装(ArrayDequeなど)では、3では許可されていませんget(i)
。
ですから、そのような実装があり、商用利用に適したライブラリが世の中にあるのではないかと思います。
そうでなければ、私は自分で書くことに頼ると思います...
c++ - boost :: multi_index_containerwithrandom_accessおよびordered_unique
boost::multi_index_container
ランダムアクセスとorderd_uniqueを同時に使用する際に問題が発生します。(長い質問で申し訳ありませんが、例を使用する必要があると思います。)
次に例を示します。ファクトリでN個のオブジェクトを作成し、オブジェクトごとに満たす必要があるとします(この要求は、マルチインデックスの作成時にわかります)。さて、私のアルゴリズム内で、次のクラスに保存する中間結果を取得します。
オブジェクトが生成されるベクトルparts
descibes(その長さはNであり、辞書式順序で私のcorespデマンドベクトルよりも小さいです!)-そのようなベクトルごとに、used_timeも知っています。さらに、生成されたオブジェクトのこのベクトルの値を取得します。
すべてのオブジェクトを生成できないように、別の制約があります。アルゴリズムintermediate_result
では、データ構造に複数のオブジェクトを格納する必要があります。そして、ここboost::multi_index_container
で使用されます。これは、とのペアが一意parts
をused_time
記述しているためですintermediate_result
(そして、データ構造内で一意である必要があります)がmax_value
、アルゴリズムは常にintermediate_result
最高のを必要とするため、これは考慮しなければならない別のインデックスmax_value
です。
そこで、「parts&used_time-pair」と(異なるオブジェクトが同じ値を持つ可能性があります)にを使用してみましたboost::multi_index_container
。ordered_unique<>
ordered_non_unique<>
max_value
intermediate_result
問題は次のとおりです。どの「parts&used_time-pair」が小さいかを判断するために必要な述語は、std::lexicographical_compare
私のparts
-vectorで使用するため、多くのオブジェクトで非常に低速ですintermediate_result
。しかし、解決策があります。各オブジェクトに対する私の需要はそれほど高くないので、可能な各部分に格納できます。中間結果をそのによって一意にベクトル化しますused_time
。
たとえば、デマンドベクトルがある場合は、可能なパーツベクトル( 2 , 3 , 1)
を格納するデータ構造が必要です。(2+1)*(3+1)*(1+1)=24
そのようなエントリごとに、一意である必要がある異なるused_timesが必要です。(最小の時間を保存するだけでは不十分です。たとえば、追加の制約が次の場合:本番環境で特定の時間を正確に満たすため)
random_access<>
しかし、 -indexと-indexを組み合わせるにはどうすればよいordered_unique<>
ですか?
(Example11はこれについては役に立ちませんでした。)
java - Java の FileChannel のメモリ内バージョン
使用しているライブラリにいくつかの変更を加えているところです。メモリ使用量を減らすために、ライブラリは一時データをメモリに保持する代わりにディスクに書き込みます。ただし、私の使用シナリオでは、メモリに保持する方が効率的です。また、一時ファイルの名前が一定であり、異なるスレッドで同時に実行できないため、並行性の問題もあります (スレッドが互いのデータを破損するため)。
したがって、代わりにすべてのデータをメモリに保持するようにライブラリを変更する必要があります。私は最初にライブラリを作成したことがないため、コードを大幅に変更することにあまり慣れていません。したがって、できるだけ少ないリファクタリングでこれを行いたいと思います。ディスクに書き込むコードは非常に単純です。以下は (やや簡略化された) 例です。
ブロックの読み取りは非常に似ています (つまり、RandomAccessFile から取得する FileChannel を使用します)。
ファイルではなくメモリ内の場所にマップする FileChannel の実装を使用できる場合、最も簡単な解決策のように感じます。FileChannel の map-method を使用して、ファイルをメモリ内の場所にマップできることを知っています。しかし、それは逆です。これにより、ファイルへの「メモリ API」が得られます。一部のメモリに対して FileChannel インターフェイスが必要です。これの利用可能な実装はありますか?
java - Java 1.6 抽象ランダム アクセス
Java の第一人者として、ランダム アクセスを抽象化して、コードがアクセスしているデータがメモリ内にあるか、ハード ドライブ上のファイルにあるかにとらわれないようにするにはどうすればよいでしょうか?
(問題のファイルのサイズは数ギガバイトになる可能性があります。ランダム アクセスが最も重要な機能です。)
compression - シーク可能な圧縮ライブラリはありますか?
解凍時のランダム アクセスをサポートする一般的な圧縮ライブラリを探しています。ウィキペディアを単一の圧縮形式に圧縮したいと同時に、そこから個々の記事を解凍/抽出したいと考えています。
もちろん、各記事を個別に圧縮することもできますが、これではあまり圧縮率が高くなりません。LZO圧縮ファイルは、個別に解凍できる多くのチャンクで構成されていると聞いたことがありますが、そのためのAPI +ドキュメントを見つけていません。zlib で Z_FULL_FLUSH モードを使用することもできますが、他のより良い代替手段はありますか?
c++ - メモリに収まらないランダムアクセスコンテナ?
オブジェクトの配列 (画像など) がありますが、大きすぎてメモリに収まりません (40GB など)。しかし、私のコードは実行時にこれらのオブジェクトにランダムにアクセスできる必要があります。
これを行う最善の方法は何ですか?
もちろん、私のコードの観点からは、一部のデータがディスク上にあるか、メモリに一時的に格納されているかは問題ではありません。透過的なアクセスが必要です。
しかし、このコンテナをどのように実装すればよいでしょうか? リクエストをデータベースに送信するだけですか?もしそうなら、どれが最良の選択肢でしょうか?(データベースの場合は、無料で、管理の手間があまりかからないようにする必要があります。おそらく、Berkeley DB か sqlite でしょうか?)
自分で実装して、アクセス後にオブジェクトをメモ化し、メモリがいっぱいになったときにメモリをパージする必要がありますか? または、これに適したライブラリ (C++) はありますか?
コンテナーの要件は、ディスク アクセスを最小限に抑え (一部の要素はコードによってより頻繁にアクセスされる可能性があるため、メモリ内に保持する必要があります)、高速アクセスを可能にすることです。
更新:コンテナーに格納するオブジェクトのサイズが動的であるため、STXXL は問題に対して機能しないことが判明しました。しかし、STXXL はそれを処理できません。
STXXL コンテナーは、格納するデータ型がプレーン オールド データ型 (POD) であることを前提としています。 http://algo2.iti.kit.edu/dementiev/stxxl/report/node8.html
他のソリューションについてコメントしていただけますか?データベースの使用についてはどうですか?そしてどれ?
java - RandomAccessFile が int をオフセットとして使用する理由
私はいくつかのデータ アクセス テストの実装を作成しており、ファイル コンテンツへのランダム アクセスが必要です。コードは次のとおりです。
ここで、オフセットの型は long です。RandomAccessFile がメソッドを提供しないのはなぜですか:
?
この問題を無効にする方法は?