sql - 用户标签系统设计 - 用户画像数据库设计




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

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

http://www.hdfgroup.org/

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

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

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

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

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

想象一下PB级的JPA遥感数据。

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


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

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


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

  1. 结构:它显然分裂成碎片,还是你做出权衡?
  2. 用法:数据将如何分析/检索/维护?
  3. 生命期:数据有多长时间有用?
  4. 大小:有多少数据?

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

就未提及的替代方案而言,不要打折Hadoop ,它是MapReduce的开源实现。 如果您需要分析一些结构松散的数据,并且您希望处于一个只需添加10台机器来处理数据处理的场景,那么这应该很好。

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

注意我更习惯于用“大”的尺寸来思考。


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


全文数据库,可以与接近运营商查询,如“10字以内”等。

关系数据库是一个理想的商业工具,可用于许多目的 - 即使不是由能够“充分利用功能”的天才设计和优化,也足够快,足够简单地理解和设计。

但是一些商业目的需要全文索引,这些关系引擎要么没有提供,要么作为事后的追求。 特别是法律和医疗领域有大量非结构化文本可以存储和浏览。


几年前有一个名为JADE的RAD工具,它有一个内置的OODBMS。 数据库引擎的早期版本也支持Digitalk Smalltalk。 如果您想使用非RDBMS范例对应用程序构建进行示例,这可能是一个开始。

其他OODBMS产品包括ObjectivityGemStone (您将需要获得VisualWorks Smalltalk运行Smalltalk版本,但也有一个Java版本)。 在这个领域也有一些开源的研究项目--EXODUS及其后代SHORE浮现在脑海。

令人遗憾的是,这个概念似乎死了,可能是由于缺乏清晰可见的标准,相对于基于SQL的RDMBS系统的临时查询能力相对较差。

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


只需使用存储在文件系统中的文件即可。 RDBMS在处理blob方面越来越好,但这可以成为处理图像数据等的自然方式,特别是在查询简单的情况下(枚举和选择单个项目)。

其他一些不适合RDBMS的东西是分层数据结构,我猜测地理空间数据和3D模型并不容易与任何工作。

Amazon S3这样的服务提供了更简单的不支持SQL的存储模型(key-> value)。 可伸缩性是关键。

Excel文件也很有用,特别是如果用户需要能够在熟悉的环境中操作数据并构建完整的应用程序来做到这一点是不可行的。


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


如果你不需要ACID ,你可能不需要RDBMS的开销。 所以,确定你是否首先需要。 这里提供的大部分非RDBMS答案都不提供ACID。


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


对象数据库不是关系数据库。 如果你只是想在数据库中填充一些对象,它们可以非常方便。 它们还支持对数据库中已存在的对象进行版本控制和修改类。 db4o是第一个想到的人。


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

对于例如日志文件的主要优点:如果你有一个巨大的,你将如何搜索它? 使用SQL引擎,您只需创建索引并加快运行速度。

关于全文搜索:SQLite也有用于全文搜索的模块..

只需享受漂亮的标准界面给你的数据:)


文件系统中的纯文本文件

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

磁盘上的XML或JSON文件

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

电子表格/ CSV文件

  • 商业用户很容易理解的模型

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

  • 对数据版本的很好的支持

伯克利DB (基本上,基于磁盘的哈希表)

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

亚马逊的简单数据库

  • 就像伯克利DB我相信,但托管

Google的App Engine数据存储

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

CouchDB

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

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

  • 非常紧密的语言整合

自定义(手写)存储引擎

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

我不能声称对它们有太多了解,但是你也可能想看看对象数据库系统


文件系统的优势在于存储二进制数据,这在关系数据库中从来不会很好地工作。





nosql