在“数据经济学”中,如何有效地执行诸如“查找华盛顿所有50岁以上的人”之类的查询(城市和年龄可能有所不同)?在关系数据库和大多数NoSQL数据库中,您都为此目的使用复合索引;据我所知,Datomic不支持类似的内容。
比如说,我开发了几个中型网络应用程序,没有一个应用程序表现得足够快,如果不是综合指数的话。数据通信用户是如何处理这个问题的?或者他们只是在玩弄小到不受此影响的数据集?我是不是遗漏了什么?
发布于 2019-06-28 16:42:10
Update2019-06-28:自0.9.5927 (Datomic )/ 480-8770 (Datomic )以来,数据组支持元组作为一种新的属性类型,它允许您具有复合索引。
发布于 2014-12-16 23:51:44
由于数据体中的数据(数据)结构,这个问题及其解决方案在数据体中是不一致的。有两个性能特性/策略可能会在这方面增加一些阴影:
(1)在获取数据时,可以从索引树(而不是单个项)中获取整个叶段--其中的段由潜在的数千个数据组成。然后自动缓存它,这样您就不必通过网络来获取更多的数据。
如果您在查询单个人--即单个实体,询问他们的年龄和居住地,则很可能查询对EAVT或AEVT索引的导航已经缓存了您所需的一切。您已经有效地缓存了数据块,如何导航到它,以及相关的数据(按索引中的位置划分)。
(2) 隔断可以提供一种指定引用地点的手动方法。分区会影响实体ID的值(它是用高比特编码的),并确保相关实体在彼此附近排序。因此,对于上述问题的替代实现,如果您同时需要来自城市和个人实体的信息,可以将它们包含在同一个分区中。
发布于 2015-03-31 23:10:42
我编写了一个库来处理这个问题:https://github.com/arohner/datomic-compound-index
https://stackoverflow.com/questions/24561429
复制相似问题