2010-01-06 52 views
18

我是一个嵌入式人,而不是数据库人。我被要求重新设计一个在几个地方存在瓶颈的现有系统。什么是嵌入式“最佳”数据库?

嵌入式设备基于运行在220mHz的ARM 9处理器。

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

他们目前正在使用SqlLite 2和规划移动到SqlLite 3.

无需启动火焰战争 - 我只是征求意见的完整d/B的新手 - 是“最好”的决定?我意识到这可能是“一根绳子多长时间?”问题,但任何指针都会受到欢迎。我不介意大量阅读&研究,但只是希望你能让我有一个飞跃的开始。谢谢。

p.s再说一次,整个重写,甚至可能不会嵌入Linux,但切换到eCos,不要太担心d/b格式之间的一次转换。哦,并且访问应该不频繁,最多每隔几秒钟一次。


编辑:好的,看来他们有30K项(可以达到100K以上),每个只有5或6场,但其中至少3个可用于记录的搜索关键字。他们玩弄“根本没有d/b,因为数据非常简单”,但在我看来,使用多个键时,我们不能使用像quicksort()类型的搜索(递归,二进制搜索)。对“no d/b”有什么想法,只是数据结构?

顺便说一句,一个关键是800K - 不知道SqlLite如何处理是(也许用“没有d/B”我要的是800K散列为更小的东西?)

+2

sqllite似乎是一个不错的选择与坚持 – Toad 2010-01-06 08:42:34

+0

是的,我建议你sqllite了。 – junmats 2010-01-06 08:44:01

+1

数据库甚至是瓶颈吗?通过你的数字,它应该没问题,除非你的存储真的很慢。请记住,10年前这将被认为是一个相当快的机器。 – 2010-01-06 09:23:00

回答

21

另外SQLite是几乎所有移动操作系统选择的数据库。 Android,Iphone OS和Symbian随SQLite一起发布,这让我认为人力资源已经用于优化这些手机中的处理器(几乎总是ARM)。

11

我会坚持使用SQLite,它的普及支持和相当丰富的功能。

6
  • 火鸟(Interbase的前面)声称工作做好嵌入。

  • HypersonicQL(HQL)体积小,速度快,也声称适合嵌入式应用。

唉,我没有亲自经验来备份任何索赔。

2

我也会建议sqlite3。 它被许多着名的应用程序使用。

4

SQLite可能是一个相当安全的赌注。但是,如果性能对您的应用程序非常重要,并且您不需要关系数据库,那么我建议您查看Berkeley DB link text。 Berkeley DB不是一个关系数据库。换句话说,如果您的数据分组在不同的表中,并且您经常需要查询需要关联来自多个表的数据的结果集,则可能需要关系数据库。Berkeley DB更适合查找表格(例如,数据被组织在几个表格中,并且您不需要从多个表格中查询数据以生成您想要的结果集合)。 Berkeley DB速度非常快,但为了充分发挥它的作用,您需要做更多的工作。

+0

只是一个单一的表,5或6场,但他们三个人可以作为一种独特的钥匙......还有很多的记录 - 30K,有可能成为10万,甚至可能是256K – Mawg 2010-01-08 00:51:31

+1

在这种情况下,我想说Berkeley DB对你的应用来说绝对是完美的。如果性能对于您的应用程序至关重要,我认为您应该考虑一下Berkeley DB。 – figurassa 2010-01-08 01:38:58

+0

下面是sqlite和Berkeley DB的性能比较:http://www.sqlite.org/cvstrac/wiki?p=KeyValueDatabase用于键值数据存储 – 2010-01-17 20:34:24

3

如果你想要一个替代品,那么berkeleydb值得一看。它曾经由sleepycat软件拥有,但现在可从oracle获得。它是一个准系统数据库引擎;是直接编程的(而不是sql)前端。它被用作许多主要数据库中的核心引擎的一部分,并作为许多嵌入式设备中的数据库 - 它在管理路由器中的路由表时特别流行。 目前,它更容易被忽视,因为更多的时尚设置,但我发现它是体面的,坚实的,对于你谈论的数字可以闪电般快。

2

SQLite是好的,但没有计划,如果你打算插入,更新和删除涉及多于6个永行的数据(在同一时间全部或任何一部分的区域)使用。问题在于,VACCUM关键字必须每隔一段时间完成,并且即使在自动执行时,它也会成为非常严重的性能瓶颈。