0

我正在构建一个倒排索引算法。我将以哈希表的形式将索引存储在文件或数据库中。更新索引涉及 1. 从文件或数据库将其加载到内存中 2. 将其转换为对象 3. 对对象进行更改 4. 将对象转换为字符串 5. 将其保存在文件或数据库中

现在,有多个来源将数据输入索引。如果 2 个或更多源尝试同时输入数据,则很有可能会遇到竞争条件。

避免这种情况的最知名技术是什么?

4

1 回答 1

1

通常,您不会将整个索引加载到内存中,然后稍后将整个索引写回磁盘。

一种选择是将索引主要放在磁盘上,然后直接修改磁盘上的文件。为了避免竞争条件,您使用某种形式的锁。如果更新很少,您可以全局锁定文件以进行写入。如果您想要更细粒度的锁定,那么您需要对磁盘上的索引结构做出更多决定。

另一种选择是将索引放在内存中,并在磁盘上维护一个“副本”以用于恢复目的。在这种情况下,更新索引的每个人最终都会操纵相同的共享内存索引,并且对其的访问将受到全局或细粒度操作系统级锁的保护。

于 2013-07-26T12:21:01.837 回答