不使用关系数据库的好理由?

cau*_*tic 138 sql database nosql

您能否指出替代数据存储工具并提供充分的理由来使用它们而不是旧的关系数据库?在我看来,大多数应用程序很少使用SQL的全部功能 - 看看如何构建一个无SQL的应用程序会很有趣.

Mat*_*ard 148

文件系统中的纯文本文件

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

磁盘上的XML或JSON文件

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

电子表格/ CSV文件

  • 非常简单的模型供业务用户理解

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

  • 非常好地支持数据版本控制

Berkeley DB(基本上是基于磁盘的哈希表)

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

亚马逊的简单数据库

  • 很像Berkeley DB我相信,但托管

Google的App Engine数据存储区

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

CouchDB的

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

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

  • 非常紧密的语言集成

自定义(手写)存储引擎

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

我不能声称对它们有任何了解,但您可能也想查看对象数据库系统.

  • Aaron:我有一个原因:SELECT FROM FROM FROM WHERE(date BETWEEN 2009-01-01 AND 2009-03-01)AND type ='error'AND system ='windows':)你会如何从文本文件中加载它? (33认同)
  • 如果您还解释了每个选择的缺点,那将是很好的,否则应该如何选择?谢谢, (10认同)
  • 将数百万行写入数据库可能需要一天时间,而将一百万行日志附加到文件只需几分钟.我永远不会理解为什么人们坚持将日志数据放入数据库. (4认同)

Tri*_*cek 26

Matt Sheppard的答案很棒(mod up),但在考虑主轴时我会考虑这些因素:

  1. 结构:它显然会破碎,还是你在做出权衡?
  2. 用法:如何分析/检索/格式化数据?
  3. 终身:数据有用多长时间?
  4. 大小:有多少数据?

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

至于未提及的替代方案,不要打折Hadoop,它是MapReduce的开源实现.如果你有一个需要分析的松散结构化数据的TON,并且你想要在一个可以添加10台机器来处理数据处理的场景中,这应该可以正常工作.

例如,我开始尝试分析基本上所有在20台机器上记录的不同功能的时序数的性能.在尝试将所有内容都放在RDBMS中之后,我意识到在汇总数据后我真的不需要再次查询数据.而且,它只对我的聚合格式有用.因此,我保留日志文件,压缩,然后将聚合数据保留在数据库中.

注意我更习惯于用"大"尺码来思考.

  • CSV文件的一个危险是逃避需要正确完成; 它很容易实现一个不真正遵循规范的CSV阅读器或编写器,因为它看起来很简单,并且有一些细微之处:http://en.wikipedia.org/wiki/Comma-separated_values#Specification (5认同)

Ubi*_*chi 10

文件系统是存储二进制数据的便利设备,在关系数据库中从不能很好地工作.


zac*_*aca 6

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


Jar*_*ike 6

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

http://www.hdfgroup.org/

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

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

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

它也像文件系统一样分层,但数据存储在一个魔术二进制文件中.

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

想想数PB的NASA/JPL遥感数据.


bzl*_*zlm 6

如果您不需要ACID,则可能不需要RDBMS的开销.所以,先确定你是否需要它.此处提供的大多数非RDBMS答案都不提供ACID.