对于我们的项目,我们需要一个支持JOIN的数据库,并且能够轻松添加和修改实体的属性(无架构/免费)。要点:
要求(从高到低的优先级):
我们尝试了什么:
您能否建议任何符合我们需求的系统数据库或设计?
答案 0 :(得分:1)
Datomic可能值得一试(http://www.datomic.com/)。它满足要求1-3,虽然没有python ORM,但有一个REST API。
Datomic基于实体属性值架构(它不是完全无架构的 - 您需要为每个属性指定名称和类型 - 但任何实体都可以具有任何属性)。它是事务性的,并且支持连接,不像其他一些灵活的“NoSQL”解决方案。有趣的是,它还具有一流的时间支持(例如,该实体的历史/数据库在时间t的外观如何等),如果您跟踪案例和交互,这可能很有用。
查询基于数据记录,通过统一查询。统一查询起初看起来有点奇怪但是一旦你习惯它就很棒。
例如,按链接的客户名称查找案例的查询将是这样的:
[find ?x
:in $
:where [?x :case/linked-customers ?c
?c :customer/name "Barry"]]
查询引擎在数据库中查找,并尝试通过统一给定变量的所有实例来满足where子句。在这种情况下,只有?c
出现两次(案例中有一个名为Barry的链接客户c),但查询显然会变得更加复杂。这里的$
代表数据库。
答案 1 :(得分:1)
您可能需要考虑将“灵活”部分存储为XML。一些数据库,例如DB2允许XML索引,因此查找性能应该与关系数据存储一样好。 DB2 Express-C是免费的,对数据库大小没有人为限制。
更新自2015年以来,DB2 Express-C将数据库用户数据量限制为15 TB,这仍然应该足够。