【问题标题】:Alternatives to MySQL [closed]MySQL的替代品[关闭]
【发布时间】:2010-09-24 11:34:03
【问题描述】:

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

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

【问题讨论】:

  • 结论是:SQLite! :)
  • 如果不详细了解您在什么环境中存储了什么样的数据,以及您想用它做什么,没有人可以对这个问题给出负责任的回答。

标签: database caching memcached scalability


【解决方案1】:

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


(来源:hsqldb.org

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • ESE 非常适合大量数据,不一定作为缓存。它适用于 AD、Exchange、Wins、FRS 和其他技术。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      这可以在以后扩展到任何东西,只需更改加载和保存过程以使用 db。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

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

          发出更改查询时,无论是否在事务中,整个数据库都会被锁定,直到该查询完成。这意味着非常大的事务可能会对其他进程的性能产生不利影响,因为它们必须等待事务完成才能访问数据库。在实践中,我并没有发现这很明显,但尽量减少您发出的数据库修改查询的数量始终是一个好习惯。

          【讨论】:

          • SQLite 非常棒且易于集成到应用程序中。最重要的是,使用它不需要客户端安装,它全部嵌入到应用程序中。
          • 但是,它确实存在并发问题
          【解决方案7】:

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

          SQLite 适合静态包含,但如果您使用 C 等兼容语言,您也可以在应用程序中包含 MySQL。

          我认为您也会喜欢 SQL 可用。 XML 文件不再适用了,可能是几年前在编写 PDA 软件时,但现在即使是 iPhone 和 Android 也包含 SQLite。

          【讨论】:

            【解决方案8】:

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

            【讨论】:

              【解决方案9】:

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

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

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

              【讨论】:

                【解决方案10】:

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

                【讨论】:

                  【解决方案11】:

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

                  如果您将有大量数据在某个阶段,我仍然会选择数据库 - 我会看看 SQLIte 之类的东西,它有一个非常简单的架构来满足您的需求.

                  【讨论】:

                    猜你喜欢
                    • 2012-06-16
                    • 2011-06-16
                    • 2011-12-17
                    • 2010-10-21
                    • 2010-12-17
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多