Nosql 自定义属性-无SQL数据存储

Nosql 自定义属性-无SQL数据存储,nosql,Nosql,我们希望开发一个应用程序,它需要支持应用程序中不同实体(如用户、项目、文件夹、文档等)的自定义属性 我在谷歌上搜索了一下prima face,似乎没有一个SQL数据库能够满足我们的要求。你认为有什么限制吗?使用非SQL而不是RDBMS的优缺点是什么 有许多非SQL数据库可用-?但是我们没有使用无SQL数据库的经验,也没有找到比较这些无SQL数据库的好文章。有什么建议没有SQL数据存储可以用来实现自定义属性功能 有两种方法可以解决您的问题:一种是列数据库,如Cassandra;或者关系数据库中的名

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

我在谷歌上搜索了一下prima face,似乎没有一个SQL数据库能够满足我们的要求。你认为有什么限制吗?使用非SQL而不是RDBMS的优缺点是什么


有许多非SQL数据库可用-?但是我们没有使用无SQL数据库的经验,也没有找到比较这些无SQL数据库的好文章。有什么建议没有SQL数据存储可以用来实现自定义属性功能

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

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

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

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

“值”实体是由客户id和属性类型代码标识的关联实体或表,具有一个值属性,该属性将净值类型分配给客户并为其提供一个值,例如“$2000000”

然而,在关系名称-值对中,在SQL中查询有些困难,并且通常执行得不好。这可以通过将“类型”和“值”实体反规范化为一个实体来解决。你没有三张桌子,而是两张——一对多。实际上,卡桑德拉就是这样做的。列族是完全展开的属性值对


我希望这有帮助。如果您要使用NOSQL,我会使用类似Cassandra的东西。如果您使用关系,我将对类型和值进行非规范化(即,折叠为一个)。relational的优点是您已经拥有了它。Cassandra的缺点是你必须学习它,但它是为你想做的事情而构建的。

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

产品编号:001 { “名称”:“硬盘驱动器”, “品牌”:“东芝”, ... ... }

要了解一些从RDBMS到Couchbase的简单模式,请访问他们的在线研讨会或访问的一些简单设计模式(不过示例是Ruby)


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

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

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

另一个优点是查询的性能。如果你查询一个用户的所有记录,比如说“Michael”,这是非常有效的,因为数据是按照google命名的大表原则存储的