2017-09-06 63 views
1

我正在考虑arangoDB进行图搜索。ArangoDB集合锁

我有两个集合,一个是人,另一个是电影,我在人与电影之间做了一个图。

当我插入查询类似下面

FOR p IN people 
    FOR m In movie 
    FILTER p.movieName == m.title 
    INSERT {_from:p._id, _to:m._id} IN peopleAndMovieRelation 

当我上面的查询查询,我无法访问peopleAndMovieRelation边缘集合。查询完成后,我可以访问它。

当数据插入时,ArangoDB是否使用收集锁?

回答

1

如果您将ArangoDB与MMFiles存储引擎一起使用,则写入块读取和锁定位于集合级别。因此在查询执行时边缘集合无法访问,边缘被写入peopleAndMovieRelation

但是,使用RocksDB存储引擎时,文档级锁允许并发写入。写入不会阻止读取。读取不会阻止写入。

https://docs.arangodb.com/3.2/Manual/Architecture/StorageEngines.html

0

下面是存储引擎额外的解释。 Comparing RocksDB and MMFiles Storage Engine

在缩短)

MMFiles存储引擎
- ArangoDB默认存储引擎基于最新版本(3.2)
- 收藏级锁
- 所有指标在启动时加载主内存(长启动如果索引太多,但访问速度最快)

RocksDB存储引擎
- 支持3.2+
- 在主内存中缓存数据,但是从磁盘负载是否需要
- 所有指数都写在磁盘
- 最快的启动(在启动时无负载指标),逐步提高性能