0

我们想要开发一个应用程序,该应用程序需要在我们的应用程序中支持对不同实体(如用户、项目、文件夹、文档等)的自定义属性。

我用谷歌搜索了一下,看起来 No-SQL 数据库可以满足我们的要求。你看到任何限制吗?使用 No-SQL 代替 RDBMS 有哪些优点/缺点?

有许多可用的 NO-SQL 数据库 - http://nosql-database.org/?但是我们没有任何使用No SQL数据库的经验。没有找到任何比较这些NO-SQL数据库的好文章。有什么建议我们可以使用哪个 No-SQL 数据存储来实现自定义属性功能?

4

3 回答 3

1

No-sql 数据库的一大优势是它的自由风格:在插入真实数据之前,您永远不会指定诸如“用户、项目、文件夹”之类的列。可以随时添加列。

而在 RDBMS 中,表模式是严格定义的,在运行时不能修改。

另一个优点是查询性能。如果你查询一个用户的所有记录,比如“迈克尔”,效率很高,因为数据是按照谷歌命名的大表原则存储的。

于 2016-01-11T15:45:49.390 回答
0

有两种方法可以解决您的问题:Cassandra 等列数据库;或关系中的名称-值对(也称为属性-值对)。

首先,Cassandra 是一个结构化的键值对存储。一个键可以包含多个可变属性和值。值或列被分组到列族中。创建 Cassandra 数据库时,列族是固定的。族类似于逻辑数据模型中的实体或关系中的表。可以随时将列添加到族中。因此,列族的不同实例可以有不同的列,这正是您所需要的。此外,列被分配给指定的键,因此不同的键在任何给定的族中可以具有不同数量的列。

名称值对,也称为属性值对,可以在逻辑数据建模和关系中创建。这可以通过三个相关的实体或表来完成:

  • 类似于列族的基本实体(例如客户)。
  • 一个“类型”实体,描述属性及其特征,例如净值金额,
  • “值”实体,将属性分配给基本实体的实例并为其分配值。

“类型”实体只是一个由类型代码标识并包含描述和其他域特征的代码表。域是指数据类型、长度、含义和度量单位。它描述了上下文之外的属性(即,未分配的)。一个例子可以是净值金额,它是一个 8 位数字,小数点后 2 位,右对齐,它的描述是“代表客户总财务价值的值,包括流动和非流动金额”。

“值”实体是由客户 ID 和属性类型代码标识的关联实体或表,并且具有将净值金额类型分配给客户并为其赋予值的值属性,例如“$2,000,000”。

但是,在关系中,名称-值对在 SQL 中查询起来有些困难,并且通常性能不佳。这可以通过将“类型”和“值”实体非规范化为一个来解决。而不是三个表,你有两个 - 一对多。实际上,这基本上就是 Cassandra 的做法。列族是完全展平的属性值对。

我希望这有帮助。如果你打算使用 NOSQL,我会使用 Cassandra 之类的东西。如果您使用关系,我会将类型和值非规范化(即合并为一个)。关系的优点是您已经拥有它。Cassandra 的缺点是你必须学习它,但它是为做你想做的事而构建的。

于 2012-08-27T01:45:58.603 回答
0

Couchbase 对您来说是一个很好的答案,如果您可以将模型封装成 JSON,那么您已经成功了一半。你的对象可以有任意数量的属性:

product::001 { "name": "Hard Drive", "brand": "Toshiba", ... ... }

要了解一些从 RDBMS 迁移到 Couchbase 的简单模式,请查看他们在http://www.couchbase.com/webinars上的网络研讨会或在http://CouchbaseModels.com上查看一些简单的设计模式(尽管示例使用 Ruby)

Couchbase 的真正优势在于模式灵活性、商品硬件上的水平可扩展性和速度。在学习了基础知识后,它更适合敏捷流程,几乎不需要迁移。在企业组织中,它非常有效,因为每列修改都需要业务流程和 DBA 的批准。Couchbase 模式的灵活性规避了很多这些问题。

于 2012-08-27T02:50:11.713 回答