一般来说,使用ES都是将其作为分布式搜索系统或者是分布式NoSQL数据库。
从这两个角度分别来说一下 ES 的写操作。
写操作
在分析一个分布式系统的写操作时,一般要考虑以下几个点:
- 可靠性:也就是持久性,数据成功写入系统后,数据不会丢失。
- 一致性:数据写入成功后,再次查询确保读到的是新数据,不能读到旧数据。
- 原子性:一个写入操作或者更新操作要么全部成功,要么完全失败, 没有中间状态。
- 隔离性:多个写入操作不影响。
- 实时性:写入后是否能够理解被查询到。
- 性能:写入性能,吞吐量等。
Lucene
ES 内部使用了 Lucene 来完成索引的创建以及搜索功能,Lucene 的写操作是通过一个叫做 IndexWriter 类来实现的,IndexWriter 提供三个接口:
public long addDocuments();
public long