問題タブ [berkeley-db]
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.
database - バークレーデータベースを開いて、複数のプログラムから同時にアクセスできますか?
Berkeleyのドキュメント、Transactional(TS)およびConcurrent Datastoreバージョンのデータベースによると、複数のスレッドがデータベースにアクセス(および変更)する可能性があります。
これは、2つのプログラムをぎこちない「クライアント」にリンクさせて、問題なく同じデータベースファイルにアクセスさせることができることも意味しますか?
(別のデータベースサーバーの場合、これはもちろん問題ありませんが、バークレーの場合、データベースエンジンはプログラムと長くリンクされています)
ありがとう!
R
atomic - Berkeley DB の使用はどの程度アトミックですか?
私はハッシュ内に 24 個の項目を含む単純なアプリを作成して、プログラムの実行間で永続化するため、Berkeley DB (DBM) がこのタスクに適しているはずです。
そして、それはただの楽しみです。
しかし、それを (Ruby で) 使用すると、ユーザーが CTRL-C を押すと、実行が停止するのではないかと思います。この場合、データがすべてめちゃくちゃになることはありませんか?
たとえば、DB の値が 63 の場合、1 ずつ増やします (64 になります)。
それで、「最も重要な」1が書き込まれ、0が書き込まれていないときにCTRL-Cが発生する可能性はありますか? その場合、DB の値は 63 または 64 ではなく 127 になります。Ruby ではなく C であり、ユーザーが「ウィンドウを閉じる」または「kill」を使用してプロセスを強制終了した場合はどうなるでしょうか。考えてみると、ハード ドライブはおそらくこのバイト (または 4 バイト) をハード ディスクの表面に一度に書き込むため、これは発生しないはずです。
CTRL-C でこれが起こらない場合、停電や自分で電源プラグを蹴ると、これが起こる可能性がありますか? たとえば、値が最初に RAM にキャッシュされ、それがハードディスクに書き込まれているときに、電源プラグを蹴ると、0 が書き込まれる前にハード ドライブの電源が失われます。100 万回に 1 度、これが起こらないことはわかっていますが、これは単なる好奇心の問題です。
一方、私のスクリプトが
- コインの価値を下げる
- ユーザーのインベントリに「ハンバーガー」を与える
次に、ユーザーが CTRL-C を押すと、上記の (1) と (2) のちょうど中間で発生し、ユーザーはコインを減らし、ハンバーガーを取得しません。
これらすべてが起こらないようにするには、SleepyCat、SQLite、または MySQL を使用したトランザクション メソッドを使用することになりますが、これらのいずれも発生しませんか?
ruby - Ruby上のBerkeleyDBのキーと値は、int、float、またはその他のタイプではなく、文字列である必要がありますか?
RubyでBerkeleyDB(DBM)を使用する場合、ハッシュのキーと値は文字列でなければならないようです。それらは他のデータ型にすることができますか?
結果:
java - 最高のパフォーマンスを得るためにファイルの読み取りに使用するJavaのAPIはどれですか?
私が働いている私の場所では、ファイルごとに100万行を超えるファイルがありました。サーバーのメモリは10GBを超え、JVMは8GBですが、サーバーがしばらくハングして他のタスクを停止することがあります。
コードのプロファイルを作成したところ、ファイル読み取りメモリの使用量がギガバイト単位で頻繁に増加し(1GBから3GB)、その後突然正常に戻ることがわかりました。この頻繁な高メモリ使用と低メモリ使用により、サーバーがハングするようです。もちろん、これはガベージコレクションによるものです。
パフォーマンスを向上させるためにファイルを読み取るには、どのAPIを使用する必要がありますか?
今、私はBufferedReader(new FileReader(...))
これらのCSVファイルを読み取るために使用しています。
プロセス:ファイルをどのように読み取っていますか?
- 私はファイルを1行ずつ読みます。
- すべての行にはいくつかの列があります。それに応じて解析するタイプに基づいて(doubleのコスト列、intのvisit列、Stringのキーワード列など)。
- 適格なコンテンツ(visit> 0)をHashMapにプッシュし、最後にタスクの最後にそのMapをクリアします
アップデート
私はこの30または31ファイル(1か月のデータ)の読み取りを行い、適格なものをマップに保存します。後でこのマップを使用して、さまざまなテーブルの犯人を取得します。したがって、読み取りは必須であり、そのデータの保存も必須です。HashMapの部分をBerkeleyDBに切り替えましたが、ファイルを読み取るときの問題は同じか、さらに悪いです。
ruby - Ruby で DBM を使用する場合、db[1] = 2 は問題ないのに、print db[1] でエラーが発生するのはなぜですか?
Ruby で DBM を使用する場合
db[1] = 2 は問題ないが、db[1] を出力するとエラーが発生することを知っている人はいますか?
db["1"] が有効である必要がある場合、両方のケースに適用されず、1 つのケースにのみ適用されるのはなぜですか?
multithreading - マルチスレッドアプリケーションのBerkeleyDB
マルチスレッドアプリケーションでberkeleyDB(bdb)ハンドルを使用する最良の方法は何ですか?
各スレッドに独自のハンドルを開いてもらう方がよいでしょうか。また、
単一のハンドルを開いて、各スレッドにtxn_begin {} txn-> commit()を実行させる方がよいでしょうか。
どちらがより適切にスケーリングしますか?DB_THREADフラグ付きのトランザクションデータストアを使用しています。
ありがとう
java - Berkeley DB JE - カーソル数を開く
開いているカーソルのリスト (または少なくとも現在開いているカーソルの数) を API に要求する方法はありますか?
svn - SVN リポジトリが使用しているファイルシステムを確認するにはどうすればよいですか?
すでにリポジトリを作成しており、しばらく使用しています。使用しているファイルシステム データ ストアを確認したかったのです。Berkeley DB または FSFS です。これを確認する方法がわかりません。私はsvnadmin、svnlookなどを見てきました。これを行う方法に関するヒントはありますか?
linker - C++ のリンク - BDB - LNK2001
BDB は、同じ VS の下の同じ PC でコンパイルされます。
#include <db_cxx.h>
int main(){
Db b(NULL, 0);
return 0;
}
1>main.obj: エラー LNK2001: 未解決の外部シンボル ""public: virtual __thiscall Db::~Db(void)" (??1Db@@UAE@XZ)"
1>main.obj : エラー LNK2001: 未解決の外部シンボル ""public: __thiscall Db::Db(class DbEnv *,unsigned int)" (??0Db@@QAE@PAVDbEnv@@I@Z)"
何が間違っている可能性がありますか?