問題タブ [embedded-database]

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.

0 投票する
10 に答える
9085 参照

python - Reliable and efficient key--value database for Linux?

I need a fast, reliable and memory-efficient key--value database for Linux. My keys are about 128 bytes, and the maximum value size can be 128K or 256K. The database subsystem shouldn't use more than about 1 MB of RAM. The total database size is 20G (!), but only a small random fraction of the data is accessed at a time. If necessary, I can move some data blobs out of the database (to regular files), so the size gets down to 2 GB maximum. The database must survive a system crash without any loss in recently unmodified data. I'll have about 100 times more reads than writes. It is a plus if it can use a block device (without a filesystem) as storage. I don't need client-server functionality, just a library. I need Python bindings (but I can implement them if they are not available).

Which solutions should I consider, and which one do you recommend?

Candidates I know of which could work:

  • Tokyo Cabinet (Python bindings are pytc, see also pytc example code, supports hashes and B+trees, transaction log files and more, the size of the bucket array is fixed at database creation time; the writer must close the file to give others a chance; lots of small writes with reopening the file for each of them are very slow; the Tyrant server can help with the lots of small writes; speed comparison between Tokyo Cabinet, Tokyo Tyrant and Berkeley DB)
  • VSDB (safe even on NFS, without locking; what about barriers?; updates are very slow, but not as slow as in cdb; last version in 2003)
  • BerkeleyDB (provides crash recovery; provides transactions; the bsddb Python module provides bindings)
  • Samba's TDB (with transactions and Python bindings, some users experienced corruption, sometimes mmap()s the whole file, the repack operation sometimes doubles the file size, produces mysterious failures if the database is larger than 2G (even on 64-bit systems), cluster implementation (CTDB) also available; file grows too large after lots of modifications; file becomes too slow after lots of hash contention; no built-in way to rebuild the file; very fast parallel updates by locking individual hash buckets)
  • aodbm (append-only so survives a system crash, with Python bindings)
  • hamsterdb (with Python bindings)
  • C-tree (mature, versatile commercial solution with high performance, has a free edition with reduced functionality)
  • the old TDB (from 2001)
  • bitcask (log-structured, written in Erlang)
  • various other DBM implementations (such as GDBM, NDBM, QDBM,, Perl's SDBM or Ruby's; probably they don't have proper crash recovery)

I won't use these:

  • MemcacheDB (client-server, uses BereleleyDB as a backend)
  • cdb (needs to regenerate the whole database upon each write)
  • http://www.wildsparx.com/apbcdb/ (ditto)
  • Redis (keeps the whole database in memory)
  • SQLite (it becomes very slow without periodic vacuuming, see autocompletion in the in the location bar in Firefox 3.0, even though versions 3.1 and later of sqlite allow auto_vacuuming; beware: small writing transactions can be very slow; beware: if a busy process is doing many transactions, other processes starve, and they can never get the lock)
  • MongoDB (too heavy-weight, treats values as objects with internal structure)
  • Firebird (SQL-based RDBMS, too heavy-weight)

FYI, a recent article about key--value databases in the Linux magazine.

FYI, an older software list

FYI, a speed comparison of MemcacheDB, Redis and Tokyo Cabinet Tyrant

Related questions on StackOverflow:

0 投票する
1 に答える
1280 参照

java - MS Access/ExcelP などのプログラムから、組み込みの Derby データベースにアクセスして分析できますか?


MS Access/Excel、Open Office などのプログラムから Java アプリケーションを使用して、組み込みの Derby データベースに保存されているデータにアクセスしたいと思いますか?
これを行う方法はありますか?これを実現できる唯一の方法は、Apache Derby に ODBC ドライバーが付属している場合だけだと思います。

0 投票する
4 に答える
812 参照

c - Pro*C問合せで変数式リストを指定する方法は?

最適化しようとしている Pro*C クエリに問題があります。

説明すると、アプリケーションは巨大なデータベースで行を検索します。これらの行は複数の言語に存在し、古いコードでは配列内の言語ごとに行が選択されていました。これらのクエリはアプリで最も時間のかかる部分であるため、配列に直接書き込むクエリを 1 つだけ作成したいと考えました。

言語コードは 2 文字の ISO-639 コードです (英語は en、フランス語は fr)。

古い方法 (これは意図を示すための単純化されたコードにすぎません)

私はこのようなことをしたいと思います:

しかし、LanCodes をどのように定義すればよいかわかりません。

このような定数(コンパイル時)リストで動作します

ただし、言語は場合によって異なる可能性があるため、これは役に立ちません。

のようなものを書くと

文字列に言語コードが 1 つある場合にのみ機能します。

だから私の質問は、誰かがこれを機能させる方法を知っていますか? Oracle のドキュメントは膨大で、どこを見ればよいかわかりません。さまざまな方法を試しましたが、どれもうまくいきませんでした。

編集 OK、私はうまくいく解決策を見つけました。エレガントではなく、高度でもありませんが、うまく機能します。OR 句のリストをクエリに入れると、必要なものが必要な形式で返されます。

2 つ以上の言語がある場合は高速なので、フェッチする言語の数に応じて、このバリアントまたは古いバリアントを呼び出します。

0 投票する
4 に答える
21739 参照

java - Java, MySQL: MySQL サーバーに Java プログラムを埋め込む方法はありますか?

私が .NET で気に入っている点の 1 つは、プロジェクトと共にデータベース ファイルを使用できることです。SQLite データベースを使用してこれを実行できることは知っていますが、MySQL データベース バックエンドでこれを達成した人はいますか?

たとえば、Java プログラムを実行すると、独自のミニ MySQL サーバーを起動してデータを操作できるはずです。基本的に、SQLite と同じフローが必要ですが、MySQL のパワーが必要です。

0 投票する
1 に答える
330 参照

blackberry - BlackBerry OS 4.7 用の軽量リレーショナル データベース

私は BlackBerry OS 4.7 用のアプリを作成していますが、SQLite などの軽量のリレーショナル データベースを使用すると、アプリケーションがデータをデバイスにローカルに保存するために使用できるため、大きなメリットが得られます。SQLite は 5.0 でリリースされますが、これはまだベータ版です。

商用利用を許可する他の代替案を誰かが推奨できますか?

追加情報: - 同時アクセスは不要 - トランザクションは不要

前もって感謝します :-)

0 投票する
2 に答える
3070 参照

c# - エンティティ フレームワークで組み込みデータベースを使用するにはどうすればよいですか?

埋め込みデータベース ソリューションで .NET エンティティ フレームワークを使用することについて疑問に思っていました。現在、私は SQL Server でのみ EF を使用していますが、新しいプロジェクトでは別のソリューションを探しています。SQL Server Compactは 1 つのソリューションですが、EF で使用できる他の代替手段はありますか? 複雑なインストールを必要としないソリューションが望ましいですか?

0 投票する
7 に答える
29241 参照

sql - SQLite はレプリケーションをサポートしていますか?

SQLite3 を組み込み、メモリ内データベースを使用するアプリケーションで、アプリケーションの 2 つの実行中のインスタンス間でデータベースを複製することは可能ですか? すべてのDBアクセスを複製する自作プロトコルを使用して手動でこれを行うことができますが、DBレイヤー内で行う必要があるようです。

0 投票する
3 に答える
832 参照

clickonce - ClickOnceアプリケーション用のSQLServerCEの代替

私は、SQLServerCEは実行可能な製品ではないという結論に達しました。バージョン管理の問題と管理者以外のインストールの不可能性の間で、それは私の会社では機能しません。

手元にあるのは、Jet、Oracle Berkeley、およびSQLiteについて考えています。ClickOnceで.NETを使用しているとすると、どの組み込みデータベースをお勧めしますか。その理由は何ですか。

0 投票する
2 に答える
1854 参照

iphone - SQLite データベースからのコア データ「Upsert」

私は現在、さまざまなデータを変更して永続化する機能を必要とするアプリを作成しています。この目的のために Core Data を使用することにしました。ユーザーがアプリケーションを初めて開いたとき、SQLite データベースから大量のデータをインポートする必要があります。このデータは多対多の関係で構成されています。

このすべてのデータをコード データ ストアに挿入する最善の方法を見つけたいと考えています。現在、アプリケーションの残りの部分がアクティブなままである間に NSOperation を使用してインポートを行っているため、ユーザーは他のことを行うことができますが、アプリ全体にすぐにアクセスできるように、できるだけ早くインポートを実行したいと考えています。 .

私が現在使用している方法は、NSFetchRequest を使用して、データ ストア内の関連エンティティを見つけようとすることです。エンティティが存在する場合は、それを関係として追加するだけです。エンティティが存在しない場合は、新しいエンティティを作成し、関係として追加します。これは機能しますが、おそらく最適にはほど遠いと思います。

私が今使っているコード:

関係を追加する方法:

0 投票する
10 に答える
36700 参照

database - 組み込みに最適なデータベースは何ですか?

私はデータベースの人ではなく、組み込みの人です。いくつかの場所でボトルネックがある既存のシステムを再設計するように依頼されました。

組み込みデバイスは、220mHzで動作するARM9プロセッサをベースにしています。

それぞれ1kのデータ(最大8つのファイル)を持つ50kのエントリ(250kに増加する可能性があります)のデータベースが必要です。それはおおよそです-必要に応じて、より正確な数値を取得しようと試みることができます。

彼らは現在SqlLite2を使用しており、SqlLite3への移行を計画しています。

炎上戦争を開始せずに-私はアドバイスを求めているだけの完全なd/b初心者です-それは「最良の」決定ですか?これは「一本の紐の長さ」かもしれないと思います。質問ですが、どんなポインタでも大歓迎です。私はたくさんの読書と研究をすることを気にしませんが、あなたが私を飛躍的なスタートに導くことができることを願っていました。ありがとう。

ps繰り返しになりますが、完全な書き直しは、組み込みLinuxに固執することすらできないかもしれませんが、eCosに切り替えると、d/b形式間の1回の変換についてあまり心配する必要はありません。ああ、アクセスは頻繁ではなく、せいぜい数秒に1回です。


編集:わかりました。それぞれ5つまたは6つのフィールドしかない30kのエントリ(100k以上に達する可能性があります)があるようですが、少なくとも3つはレコードの検索キーになります。彼らは「データがとても単純なので、d / bがまったくない」ことをいじっていますが、複数のキーでは、quicksort()タイプの検索(再帰的、バイナリ検索)のような凝ったものを使用できなかったようです。 )。データ構造だけで、「d / bなし」について何か考えはありますか?

ところで、1つのキーは800kです-SqlLiteがそれをどれだけうまく処理できるかわかりません(おそらく「nod / b」では、その800kをより小さなものにハッシュする必要がありますか?)