具有任意实体的系统的EAV与文档数据库对比XML列?

时间:2016-05-23 14:35:21

标签: mysql xml entity-attribute-value database nosql

尽管在网上阅读了大量不同的意见和建议,但我仍然无法真正决定解决当前要求的最佳解决方案。

本质上,我需要建立一个系统,在这个系统中,可以使用任意数量的属性对对象进行任意定义。应用程序跟踪这些对象的位置和状态,我不可能在编译时知道这些对象的完整策略是什么(除了这将被出售给许多公司以跟踪它们将会是什么)。

数据本身将具有某种形式的关系。其中最大的一个是位置层次结构的概念; think Country-> Province-> Town-> Postcode-> Building-> Room-> Locker-> Object

数据中也会有其他一些Parent-> Child关系。例如,汽车的实例具有发动机的实例,具有活塞的实例。

对象和数据的历史将是重要的。对象在不同时间和地点的状态将是该系统的一个重要使用特征。能够检索报告的完整历史记录也很重要。

我看到的选项:

EAV - SQL中的实体属性值(或混合)

优点:

  • 它的关系和规范化

  • 查询功能强大

  • 数据的关系和层次结构部分符合这种范例

  • 通过存储日期与属性

  • 实现的历史记录

缺点:

  • 查询复杂性

  • 90%的时间对象的每个属性都需要给予 大量的联接

  • 很可能到处都会有支点

  • 其他

与XML的关系会捕获所有列:

优点:

  • 关系善,ORM等等(以上所有)

  • 如何存储历史记录?

缺点:

  • 绝大多数属性都在此XML列中 (说大于70%)

  • 慢查询?

  • 其他

文档数据库

优点:

  • 打开架构

  • 历史就像检索旧文档一样简单

缺点:

  • 我有相当数量的关系数据!

  • 查询支持(我不太了解专业知识和专业知识 缺点是每个文档DB技术)

  • 其他

正如您所知,我的经验主要来自关系数据库(SQL)。除此之外,我已经在SQL中使用和EAV / Relational混合物原型化了一个类似的解决方案,并且当事情变得非常复杂时发现它是一个彻头彻尾的痛苦。

我是技术不可知论者;我拥有大量技术人员的前后经验,并且不会对学习任何新东西产生不利影响。

对我的情况有什么看法;它的长短是以上每一种都是解决问题的有效方法,但我很想听听其他人的想法和经历,所以我可以尽量避免任何代价高昂的盲目方面。

0 个答案:

没有答案