database - memcached官网 - scaling memcache at facebook




MySQL的替代品 (8)

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

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


你可以试试CounchDB ,它是一个非常灵活的面向文档的数据库,不会强迫你预先定义一个模式。 它是用Erlang编写的,因此它被认为是非常可扩展的解决方案。 可以通过REST界面轻松查询。


如果你写一个想要嵌入式数据库的java程序看看hsqldb,因为它是用java编写的,如果从java程序调用sqlite,效果会好得多。


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

如果在某个阶段你会得到很多数据,我仍然会选择一个数据库 - 我会用一个非常简单的模式来看看SQLIte ,以满足你的需求。


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

SQLite对于静态包含是很好的,但是如果你使用的是兼容的语言,比如C,你也可以在你的应用程序中包含MySQL。

我想你会喜欢有SQL可用。 XML文件只是不能再削减它,也许在几年前编写PDA软件,但即使是iPhone和Android现在包括SQLite。


总是有SQLite ,一个存储在文件中的数据库。 SQLite已经具有内置的并发性,所以你不必担心文件锁定之类的事情,而且读取真的很快。

但是,如果您正在做大量的数据库更改,最好在事务内一次完成。 这只会将更改写入文件一次,而不是每次发出更改查询。 这大大提高了做多个变化的速度。

当更改查询发出时,无论是否在tranasction中,整个数据库都会被锁定,直到查询结束。 这意味着非常大的事务可能会对其他进程的性能产生不利影响,因为它们必须等待事务完成才能访问数据库。 在实践中,我还没有发现这是显而易见的,但尝试最大限度地减少发出的数据库修改查询的数量总是一个好习惯。


我真的不确定你是否应该考虑将信息存储在XML文档中,如果真的是这样的话? 如果不是你考虑SQLite


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

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

除非你有一个真正的理由不使用真正的DRBMS,否则我建议你坚持使用MySQL或其他“成熟的”引擎。






scalability