Database 支持连接和灵活数据模式的数据库
对于我们的项目,我们需要一个支持连接并能够轻松添加和修改实体属性(无模式/自由模式)的数据库。要点:Database 支持连接和灵活数据模式的数据库,database,Database,对于我们的项目,我们需要一个支持连接并能够轻松添加和修改实体属性(无模式/自由模式)的数据库。要点: 该系统旨在与客户合作(CRM) 基本实体:用户、客户、案例、案例交互、订单 目前数据库中有约20万客户和约25万订单 客户实体包含15-20个最常未填写的可选属性 每天大约有100例新病例 数据与后台的其他几个源同步 要求(高优先级到低优先级): 能够按相关实体进行搜索/排序,例如按链接的客户名称(支持连接)进行分类 具有更改数据模式的灵活性,并且不会为大量属性存储NULL 演出 ORM f
- 该系统旨在与客户合作(CRM)
- 基本实体:用户、客户、案例、案例交互、订单
- 目前数据库中有约20万客户和约25万订单
- 客户实体包含15-20个最常未填写的可选属性
- 每天大约有100例新病例
- 数据与后台的其他几个源同步
- MongoDB不满足第1款的要求李>
- 在一个表中包含所有属性的PostgreSQL不满足第2段的要求李>
- 每个属性或EAV都有一个单独的表的PostgreSQL不能满足第3段的要求(很多慢连接),但似乎是比其他方法更好的解决方案李>
您能推荐任何能满足我们需求的数据库或系统设计吗?Datomic可能值得一试()。它满足需求1-3,尽管没有python ORM,但有一个RESTAPI Datomic基于实体属性值模式(它不是完全无模式的-您需要为每个属性指定名称和类型-但任何实体都可以有任何属性)。它是事务性的,并且支持连接,与其他一些灵活的“NoSQL”解决方案不同。有趣的是,它还具有一流的时间支持(例如,该实体的历史记录是什么/在时间t时数据库是什么样子的,等等),如果您跟踪案例和交互,这可能会很有用 查询基于数据日志,数据日志通过统一进行查询。统一查询一开始看起来有点奇怪,但一旦你习惯了它,它就会非常棒 例如,通过链接客户名称查找案例的查询如下:
[find ?x
:in $
:where [?x :case/linked-customers ?c
?c :customer/name "Barry"]]
查询引擎在数据库中查找,并通过统一给定变量的所有匹配项来尝试满足where子句。在这种情况下,只有
?c
出现两次(案例中有一个名为Barry的链接客户c),但查询显然会变得复杂得多。此处的$
表示数据库 > P>您可能想考虑将“灵活”部分存储为XML。有些数据库(例如DB2)允许XML索引,因此查找性能应该和关系数据存储一样好。DB2Express-C是免费的,对数据库大小没有人为的限制
更新自2015年以来,DB2 Express-C将数据库用户数据量限制在15 TB,这仍然足够