您能否指出替代的数据存储工具,并给出使用它们而不是老式关系数据库的充分理由?在我看来,大多数应用程序很少使用 SQL 的全部功能——了解如何构建一个不依赖 SQL 的应用程序会很有趣。

有帮助吗?

解决方案

文件系统中的纯文本文件

  • 创建和编辑非常简单
  • 用户可以使用简单的工具轻松操作(即文本编辑器、grep 等)
  • 二进制文档的高效存储

磁盘上的 XML 或 JSON 文件

  • 如上所述,但具有更多验证结构的能力。

电子表格/CSV 文件

  • 非常容易让商业用户理解的模型

Subversion(或类似的基于磁盘的版本控制系统)

  • 对数据版本控制有很好的支持

伯克利数据库 (基本上,一个基于磁盘的哈希表)

  • 概念上非常简单(只是未键入的键/值)
  • 蛮快
  • 无管理开销
  • 支持我相信的交易

亚马逊的简单数据库

  • 我相信很像伯克利数据库,但托管

Google 的 App Engine 数据存储

  • 托管且高度可扩展
  • 每个文档的键值存储(即灵活的数据模型)

沙发数据库

  • 文档焦点
  • 半结构化/基于文档的数据的简单存储

本机语言集合(存储在内存中或在磁盘上序列化)

  • 非常紧密的语言集成

自定义(手写)存储引擎

  • 在所需用例中可能具有非常高的性能

我不能声称对他们了解很多,但你可能也想了解一下 对象数据库系统.

其他提示

马特·谢泼德(Matt Sheppard)的回答很好(升级),但在考虑主轴时我会考虑这些因素:

  1. 结构 :它显然会分裂,还是你正在做出权衡?
  2. 用法 :如何分析/检索/理解数据?
  3. 寿命 :数据的有用期限是多久?
  4. 尺寸 :有多少数据?

与 RDBMS 相比,CSV 文件的一个特殊优势是它们可以轻松压缩并移动到几乎任何其他机器。我们进行大量数据传输,一切都很简单,我们只需使用一个大 CSV 文件,并且可以使用 rsync 等工具轻松编写脚本。为了减少大型 CSV 文件的重复,您可以使用类似的方法 YAML. 。我不确定是否会存储 JSON 或 XML 等内容,除非您有重要的关系要求。

至于未提及的替代方案,请不要打折 Hadoop, ,这是 MapReduce 的开源实现。如果您有大量松散结构的数据需要分析,并且您希望能够再添加 10 台机器来处理数据,那么这种方法应该会很有效。

例如,我开始尝试分析性能,本质上是在大约 20 台机器上记录的不同功能的所有计时数。在尝试将所有内容都放入 RDBMS 中后,我意识到一旦聚合数据,我真的不需要再次查询数据。而且,它仅以聚合格式对我有用。因此,我保留日志文件并进行压缩,然后将聚合数据保留在数据库中。

笔记 我更习惯于用“大”尺寸来思考。

文件系统对于存储二进制数据非常方便,而在关系数据库中,二进制数据的工作效果从来都不是很好。

尝试普威勒:http://www.prevayler.org/wiki/Prevayler 是 RDBMS 的替代品。在网站上有更多信息。

如果你不需要 , ,您可能不需要 RDBMS 的开销。因此,首先确定您是否需要它。这里提供的大多数非 RDBMS 答案都可以 不是 提供酸。

自定义(手写)存储引擎/在所需用例中可能具有非常高的性能

http://www.hdfgroup.org/

如果您有大量数据集,您可以使用 HDF(分层数据格式),而不是自行滚动。

http://en.wikipedia.org/wiki/Hierarchical_Data_Format:

HDF 支持多种不同的数据模型,包括多维数组、光栅图像和表格。

它也像文件系统一样是分层的,但数据存储在一个神奇的二进制文件中。

HDF5 是一个套件,可以管理极其庞大且复杂的数据集合。

想想 NASA/JPL 遥感数据的 PB 级。

你好,

我能想到的一种情况是,您正在建模的数据无法轻松地在关系数据库中表示。

移动电话运营商用来监视和控制移动电话网络基站的数据库就是一个这样的例子。

我几乎所有这些情况, 面向对象数据库 使用商业产品或允许对象层次结构的自滚动系统。

我曾为一家大公司开发过 3G 监控应用程序,该公司将保持匿名,但其徽标是红酒渍(-:,他们使用这样的 OO DB 来跟踪网络中各个单元的所有各种属性。

对此类数据库的询问是使用专有技术完成的,这些技术通常完全不受 SQL 的影响。

HTH。

干杯,

对象数据库不是关系数据库。如果您只想将一些对象填充到数据库中,它们会非常方便。它们还支持版本控制并修改数据库中已存在的对象的类。 数据库4o 我第一个想到的就是这个。

在某些情况下(例如金融市场数据和流程控制)您可能需要使用实时数据库而不是 RDBMS。看 维基链接

有一个 RAD 工具叫做 几年前编写的,具有内置的 OODBMS。DB 引擎的早期版本也支持 Digitalk Smalltalk。如果您想使用非 RDBMS 范例来构建应用程序示例,这可能是一个开始。

其他 OODBMS 产品包括 客观性, 宝石 (您将需要获得 视觉作品 Smalltalk 运行 Smalltalk 版本,但也有 java 版本)。这个领域还有一些开源研究项目 - 我想到的是 EXODUS 及其后代 SHORE。

遗憾的是,这个概念似乎已经消亡,可能是由于缺乏清晰可见的标准以及相对于基于 SQL 的 RDMBS 系统相对较差的即席查询能力。

OODBMS 最适合具有核心数据结构的应用程序,这些数据结构最好表示为互连节点图。我曾经说过,典型的 OODBMS 应用程序是一个多用户地下城 (MUD),其中的房间包含玩家的头像和其他对象。

仅使用文件系统中存储的文件就可以走很长的路。RDBMS 在处理 blob 方面做得越来越好,但这可能是处理图像数据等的自然方法,特别是如果查询很简单(枚举和选择单个项目)。

其他不太适合 RDBMS 的东西是分层数据结构,我猜地理空间数据和 3D 模型也不是那么容易使用。

服务如 亚马逊S3 提供不支持 SQL 的更简单的存储模型(键->值)。可扩展性是关键。

Excel 文件也很有用,特别是当用户需要能够在熟悉的环境中操作数据并且构建完整的应用程序来完成此操作不可行时。

存储数据的方法有很多种 - 甚至“关系数据库”也涵盖了一系列替代方案,从简单的代码库开始,该代码库像单个用户的关系数据库一样操作本地文件(或多个文件),通过基于文件的系统比可以处理多个用户的系统更适合大量选择严肃的基于“服务器”的系统。

我们经常使用 XML 文件 - 您可以获得结构良好的数据、用于查询的好工具、在适当的情况下进行编辑的能力、人类可读的东西,然后您不必担心数据库引擎的工作(或数据库引擎的工作)数据库引擎)。这对于本质上是只读的东西(在我们的例子中通常不是从其他地方的数据库生成的)以及单用户系统来说效果很好,在单用户系统中您可以根据需要加载数据并保存出来 - 但您正在创造机会如果您想要多用户编辑(至少是单个文件),则可以解决问题。

对于我们来说,就是这样 - 我们要么使用可以执行 SQL 的工具(MS 提供了一组从 .DLL 运行的工具,可以执行单用户操作,一直到企业服务器,并且它们都使用相同的 SQL (在低端有限制))或者我们将使用 XML 作为格式,因为(对我们来说)冗长很少是问题。

目前,我们不需要在应用程序中操作二进制数据,因此不会出现这个问题。

墨菲

如果应用程序数据本质上是面向键/值且分层的,那么人们可能会考虑使用 LDAP 服务器来代替传统的 SQL 数据库。

BTree 文件通常比关系数据库快得多。SQLite 中包含一个属于公共领域的 BTree 库(如真正的“公共领域”,而不是宽松地使用该术语)。

坦率地说,如果我想要一个多用户系统,我需要大量说服不要使用像样的服务器关系数据库。

全文数据库,可以使用邻近运算符(例如“10个字以内”等)进行查询。

关系数据库是用于多种用途的理想业务工具 - 足够容易理解和设计、足够快、足够,即使它们不是由可以“使用全部功能”的天才设计和优化的,等等。

但某些商业目的需要全文索引,而关系引擎要么不提供,要么是事后才添加的。特别是,法律和医学领域有大量非结构化文本需要存储和处理。

还:* 嵌入式场景 - 通常需要使用比成熟的 RDBMS 更小的东西。 db4o 是在这种情况下可以轻松使用的 ODB。* 快速或概念验证开发 - 您希望专注于业务而不用担心持久层

CAP定理 简单地解释一下。SQL主要提供“强一致性:即使存在更新,所有客户端也会看到相同的视图”。

吻:保持小而简单

我会提供RDBMS :)如果您不对SQLITE的设置/管理遇到麻烦。内置 RDBMS,具有完整的 SQL 支持。它甚至允许您在任何列中存储任何类型的数据。

相对于例如日志文件的主要优点:如果你有一个巨大的,你将如何在其中搜索?使用 SQL 引擎,您只需创建索引并显着加快操作速度。

关于全文检索:SQLite 也有全文搜索模块。

只需享受良好的数据标准接口即可:)

不使用关系数据库的一个很好的理由是当您拥有大量数据集并且想要对数据进行大规模并行和分布式处理时。谷歌网络索引就是这种情况的一个完美例子。

Hadoop 也有一个实现 谷歌文件系统 叫做 Hadoop分布式文件系统.

我强烈推荐 Lua 作为 SQLite 类数据存储的替代方案。

因为:

  • 该语言最初被设计为数据描述语言
  • 语法是人类可读的(XML 是 不是)
  • 可以将 Lua 块编译为二进制,以提高性能

这是已接受答案的“母语集合”选项。如果您使用 C/C++ 作为应用程序级别,那么仅仅为了读取配置/数据或将其写出,就完全合理地引入 Lua 引擎(100kB 的二进制文件)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top