Database 支持连接和灵活数据模式的数据库

Database 支持连接和灵活数据模式的数据库,database,Database,对于我们的项目,我们需要一个支持连接并能够轻松添加和修改实体属性(无模式/自由模式)的数据库。要点: 该系统旨在与客户合作(CRM) 基本实体:用户、客户、案例、案例交互、订单 目前数据库中有约20万客户和约25万订单 客户实体包含15-20个最常未填写的可选属性 每天大约有100例新病例 数据与后台的其他几个源同步 要求(高优先级到低优先级): 能够按相关实体进行搜索/排序,例如按链接的客户名称(支持连接)进行分类 具有更改数据模式的灵活性,并且不会为大量属性存储NULL 演出 ORM f

对于我们的项目,我们需要一个支持连接并能够轻松添加和修改实体属性(无模式/自由模式)的数据库。要点:

  • 该系统旨在与客户合作(CRM)
  • 基本实体:用户、客户、案例、案例交互、订单
  • 目前数据库中有约20万客户和约25万订单
  • 客户实体包含15-20个最常未填写的可选属性
  • 每天大约有100例新病例
  • 数据与后台的其他几个源同步
要求(高优先级到低优先级):

  • 能够按相关实体进行搜索/排序,例如按链接的客户名称(支持连接)进行分类
  • 具有更改数据模式的灵活性,并且不会为大量属性存储NULL
  • 演出
  • ORM for Python,支持监视更改,并且可以只存储对数据库的更改
  • 我们尝试的是:

    • 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,这仍然足够