问题标签 [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 - 可靠高效的 Linux 键值数据库?

我需要一个快速、可靠且内存高效的 Linux 键值数据库。我的密钥大约是 128 字节,最大值大小可以是 128K 或 256K。数据库子系统不应使用超过 1 MB 的 RAM。总数据库大小为 20G (!),但一次只能访问一小部分随机数据。如有必要,我可以将一些数据块移出数据库(移至常规文件),因此最大大小可降至 2 GB。数据库必须在系统崩溃时幸存下来,而不会丢失最近未修改的数据。我将有大约 100 倍于写入的读取。如果它可以使用块设备(没有文件系统)作为存储,那将是一个加号。我不需要客户端-服务器功能,只需要一个库。我需要 Python 绑定(但如果它们不可用,我可以实现它们)。

我应该考虑哪些解决方案,您推荐哪一个?

我知道哪些候选人可以工作:

  • Tokyo Cabinet(Python绑定为pytc,另见pytc示例代码,支持hash和B+trees,事务日志文件等,bucket数组的大小在数据库创建时固定;作者必须关闭文件给别人一个机会;大量的小写入,每个文件都重新打开非常慢;Tyrant 服务器可以帮助处理大量的小写入;Tokyo Cabinet、Tokyo Tyrant 和 Berkeley DB 之间的速度比较
  • VSDB(即使在 NFS 上也是安全的,没有锁定;障碍呢?;更新非常慢,但没有 cdb 慢;最后一个版本在 2003 年)
  • BerkeleyDB(提供崩溃恢复;提供事务;bsddbPython 模块提供绑定)
  • Samba 的 TDB(带有事务和 Python 绑定,一些用户经历了损坏,有时mmap()是整个文件,repack操作有时会使文件大小翻倍,如果数据库大于 2G(即使在 64 位系统上),也会产生神秘的故障,集群实现(CTDB ) 也可用;在大量修改后文件变得太大;在大量哈希争用后文件变得太慢;没有内置方法来重建文件;通过锁定单个哈希桶实现非常快速的并行更新)
  • aodbm(仅附加,因此可以在系统崩溃中幸存下来,使用 Python 绑定)
  • hamsterdb(使用 Python 绑定)
  • C-tree(成熟的、多功能的高性能商业解决方案,有一个减少功能的免费版本)
  • 旧的TDB(从 2001 年开始)
  • bitcask(日志结构,用 Erlang 编写)
  • 各种其他 DBM 实现(例如 GDBM、NDBM、QDBM、Perl 的 SDBM 或 Ruby 的;可能它们没有适当的崩溃恢复)

我不会使用这些:

  • MemcacheDB(客户端-服务器,使用 BereleleyDB 作为后端)
  • cdb(需要在每次写入时重新生成整个数据库)
  • http://www.wildsparx.com/apbcdb/(同上)
  • Redis(将整个数据库保存在内存中)
  • SQLite(如果没有定期清理它会变得非常慢,请参阅 Firefox 3.0 中位置栏中的自动完成,即使 sqlite 3.1 及更高版本允许auto_vacuuming;当心:小型写入事务可能非常慢;当心:如果一个繁忙的进程是做许多事务,其他进程饿死,他们永远无法获得锁)
  • MongoDB(过于重量级,将值视为具有内部结构的对象)
  • Firebird(基于 SQL 的 RDBMS,太重了)

仅供参考,最近一篇关于Linux 杂志中键值数据库的文章。

仅供参考,较旧的软件列表

仅供参考,MemcacheDB、Redis 和 Tokyo Cabinet Tyrant 的速度比较

StackOverflow 上的相关问题:

0 投票
1 回答
1280 浏览

java - 是否可以通过 MS Access/ExcelP 等程序访问嵌入式 Derby 数据库以进行分析


我想通过我的 Java 应用程序从 MS Access/Excel、Open Office 等程序访问存储在嵌入式 Derby 数据库中的数据?
有没有办法做到这一点?我想这可以实现的唯一方法是如果 Apache Derby 带有 ODBC 驱动程序,对吗?

0 投票
4 回答
812 浏览

c - 如何在 Pro*C 查询中指定变量表达式列表?

我正在尝试优化的 Pro*C 查询有问题。

解释一下,我们的应用程序在一个巨大的数据库中搜索行。这些行以多种语言存在,旧代码为数组中的每种语言选择了一行。现在,由于这些查询是我们应用程序中最耗时的部分,我只想进行一个直接写入数组的查询。

语言代码是 2 个字母的 ISO-639 代码(en 表示英语,fr 表示法语)。

老办法(这只是一个简化的代码来表明意图)

我想做这样的事情:

但不知道我应该如何定义 LanCodes。

它适用于像这样的常量(编译时间)列表

但这没有用,因为语言可能因情况而异。

如果我写类似

它仅在字符串中有 1 种语言代码时才有效。

所以我的问题是,有人知道如何进行这项工作吗?Oracle 文档太大了,我不知道在哪里看。我尝试了不同的方法,但没有一个奏效。

编辑 好的,我找到了一个可行的解决方案。它不优雅,不高级,但效果很好。我在查询中放了一个 OR 子句列表,它以我需要的形式返回我需要的内容。

当有超过 2 种语言时它会更快,所以我根据要获取的语言数量调用这个变体或旧的变体。

0 投票
4 回答
21739 浏览

java - Java, MySQL:有没有办法在 Java 程序中嵌入 MySQL 服务器?

我喜欢 .NET 的一件事是能够与项目一起拥有数据库文件。我知道使用 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# - 如何将嵌入式数据库与 Entity 框架一起使用?

我想知道将 .NET 实体框架与嵌入式数据库解决方案一起使用。现在,我只将 EF 与 SQL Server 一起使用,但对于一个新项目,我正在寻找替代解决方案。SQL Server Compact将是一种解决方案,但还有其他替代方案可以与 EF 一起使用吗?不需要复杂安装的首选解决方案?

0 投票
7 回答
29241 浏览

sql - SQLite 是否支持复制?

在嵌入 SQLite3 并使用内存数据库的应用程序中,是否可以在应用程序的两个运行实例之间复制数据库?我可以使用自制协议手动完成此操作,复制我所有的数据库访问,但这似乎应该在数据库层内完成。

0 投票
3 回答
832 浏览

clickonce - 替换 ClickOnce 应用程序的 SQL Server CE

我得出的结论是 SQL Server CE 不是一个可行的产品。在版本问题和非管理员安装的可能性之间,它在我的公司不起作用。

我正在考虑 Jet、Oracle Berkeley 和 SQLite。鉴于我正在使用带有 ClickOnce 的 .NET,您会推荐什么嵌入式数据库,为什么?

0 投票
2 回答
1854 浏览

iphone - 来自 SQLite 数据库的核心数据“Upsert”

我目前正在编写一个需要能够修改和保留各种数据的应用程序。为此,我决定使用 Core Data。当用户第一次打开应用程序时,我需要从 sqlite 数据库中导入大量数据,这些数据由多对多关系组成。

我想找出将所有这些数据插入我的代码数据存储的最佳方法。现在我正在使用 NSOperation 进行导入,而应用程序的其余部分仍然处于活动状态,因此用户可以做其他事情,但我希望尽快进行导入,以便可以立即访问整个应用程序.

我现在使用的方法是使用 NSFetchRequest 尝试在数据存储中查找相关实体,如果实体存在,我只需将其添加为关系,如果实体不存在,我创建一个新实体并将其添加为关系。这行得通,但我觉得它可能甚至不接近最佳状态。

我现在使用的代码:

添加关系的方法:

0 投票
10 回答
36700 浏览

database - 嵌入式的“最佳”数据库是什么?

我是嵌入式人,而不是数据库人。我被要求重新设计在多个地方存在瓶颈的现有系统。

该嵌入式设备基于运行频率为 220mHz 的 ARM 9 处理器。

应该有一个包含 50k 个条目(可能增加到 250k)的数据库,每个条目包含 1k 个数据(最多 8 个字段)。这是近似值 - 如果需要,我可以尝试获得更精确的数字。

他们目前正在使用 SqlLite 2 并计划迁移到 SqlLite 3。

没有开始一场激烈的战争——我是一个完全的 d/b 新手,只是在寻求建议——这是“最好”的决定吗?我意识到这可能是“一根绳子有多长?” 问题,但任何指针都将受到极大的欢迎。我不介意做大量的阅读和研究,但只是希望你能让我有一个好的开始。谢谢。

ps 再次,完全重写,甚至可能不坚持嵌入式Linux,而是切换到eCos,不要太担心d/b格式之间的一次转换。哦,访问应该不频繁,最多每隔几秒一次。


编辑:好的,似乎他们有 30k 个条目(可能达到 100k 或更多),每个条目只有 5 个或 6 个字段,但其中至少 3 个可以作为记录的搜索键。他们正在玩弄“根本没有 d/b,因为数据是如此简单”,但在我看来,对于多个键,我们不能使用诸如 quicksort() 类型搜索(递归、二进制搜索)之类的花哨的东西)。关于“无 d/b”的任何想法,只是数据结构?

顺便说一句,一个键是 800k - 不确定 SqlLite 处理得有多好(也许使用“no d/b”我必须将 800k 散列到更小的值?)