MySQL的替代品

时间:2008-11-28 16:49:51

标签: database caching memcached scalability

我想为我的应用程序持久存储数据,但我真的不需要一个完整的关系数据库。我真的可以使用基本的“缓存”式持久性存储,其中结构只是一个(键,值)对。

代替数据库我最好的,可扩展的选项是什么?

11 个答案:

答案 0 :(得分:13)

总是SQLite,一个存储在文件中的数据库。 SQLite已经具有内置并发性,因此您不必担心文件锁定等问题,并且读取速度非常快。

但是,如果您正在进行大量数据库更改,最好在transaction内一次完成所有这些更改。这只会将更改写入文件一次,而不是每次发出更改查询。这大大提高了进行多项更改的速度。

当发出更改查询时,无论它是否在一个tranasction内,整个数据库都会被锁定,直到该查询完成。这意味着极大的事务可能会对其他进程的性能产生负面影响,因为它们必须等待事务完成才能访问数据库。在实践中,我没有发现这一点是显而易见的,但尝试最小化您发出的数据库修改查询的数量总是好的做法。

答案 1 :(得分:6)

如果您想要“持久缓存”,并且已使用memcached,请检查memcachedb。它是使用memcached协议的持久散列表,不需要新的客户端(但是需要一个新的守护进程)

答案 2 :(得分:3)

我最近问similar question。以下是一些选择:

答案 3 :(得分:2)

如果您需要可扩展性,那么RDBMS是您最好的选择。在最基本的层面上,您可以将数据结构序列化为文件 - 但是,您需要考虑会限制并发性的文件锁定问题。

SQLite是一个基于SQL文件的数据库引擎,它可以在没有持久数据库守护程序的情况下运行(例如,在PHP中作为扩展运行),但它也有并发问题(请阅读this question的答案)这可以帮助您确定SQLite是否适合您。)

除非你有充分的理由不使用真正的DRBMS,否则我建议你坚持使用MySQL或其他“全面的”引擎。

答案 4 :(得分:1)

如果你想要一些真正可扩展的东西,我不会选择平面或XML文件。随着数据的增长,它可能会影响您的性能。

如果你在某个阶段有很多数据,我仍然会选择一个数据库 - 我会看一下像SQLIte这样的东西,它有一个非常简单的模式来适应你的需求。

答案 5 :(得分:1)

我真的不确定你应该但你是否考虑过将信息存储在XML文档中,如果真的那么轻松?如果你没有考虑SQLite

答案 6 :(得分:1)

如果您编写一个需要嵌入式数据库的java程序,请查看hsqldb,因为它是用java编写的,并且如果从java程序调用则比sqlite好得多。

答案 7 :(得分:1)

如果您正在编写Java,那么您可以直接包含Java数据库实现(Jared提及hsqldb,还有其他实现)。

SQLite适用于静态包含,但如果您使用的是兼容语言(如C),则还可以在应用程序中包含MySQL。

我认为您也会感谢提供SQL。 XML文件不再削减它,可能是几年前编写PDA软件时,但即便是iPhone和Android现在都包含SQLite。

答案 8 :(得分:1)

内存模式下的hsqldb将比基于平面文件的数据库提供更好的性能。它也很容易使用。如果表格太大,可以选择将其缓存在磁盘上。看看这个性能比较:

http://hsqldb.org/images/imola_retrieve.jpg
(来源:hsqldb.org

答案 9 :(得分:1)

对于Key = Value对,您可以使用带有简单加载和保存过程的INI文件格式来加载它并将其保存到内存中的哈希表中。

稍后可以扩展到anythig,只需更改加载并保存过程以使用db。

答案 10 :(得分:1)

您可以尝试CounchDB,它是一个非常灵活的面向文档的数据库,不会强制您预先定义架构。它是用Erlang编写的,由于它被认为是非常可扩展的解决方案。可以通过REST接口轻松查询。