如何避免在基于Sirius的应用程序中调用enqueueGet?

时间:2014-07-28 19:56:46

标签: java rest distributed-computing

Sirius是“用于管理应用程序引用数据的分布式系统库”,用Scala编写,用于JVM。 Sirius的目标是将数据的完整副本分发到每个节点。

我注意到enqueueGet方法用于处理GET请求。这涉及在处理之前序列化所有GET请求。但是,我想尝试不对所有GET进行序列化以避免读取延迟;有没有办法避免调用enqueueGet?如果是的话,我该怎么做?

1 个答案:

答案 0 :(得分:1)

Sirius库的设计使每个节点都拥有完整的数据副本。此数据存储在内存中,可直接在应用程序中使用。根据{{​​3}},enqueueGet操作强加了可能没有必要的开销。 enqueueGet操作将通常在当前操作完成后立即序列化要执行的get请求。这是本地序列化,它不通过Paxos。使用enqueueGet可以防止应用程序执行并发获取,并且还可以防止在更新数据时执行get。

所以你需要处理两件事:

  1. 您的应用程序需要能够自己处理并发GET操作。根据数据和应用程序的性质,这可能是也可能不是问题。
  2. 您的应用程序需要编写,以便与PUT或DELETE同时执行的GET不会看到部分更新的项目。您的基础数据结构不应允许部分更新,或者您需要容忍GETting部分更新。