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

标签 java rest distributed-computing

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

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

最佳答案

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

因此您需要注意两件事:

  1. 您的应用程序需要能够自行处理并发 GET 操作。这可能是也可能不是问题,具体取决于数据和应用程序的性质。
  2. 您的应用程序需要编写,以便与 PUT 或 DELETE 同时执行的 GET 不会看到部分更新的项目。您的底层数据结构不应允许部分更新,否则您将需要容忍 GET 部分更新。

关于java - 如何避免在基于 Sirius 的应用程序中调用 enqueueGet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25003287/

相关文章:

web-services - Azure 中的分布式计算应用程序作为 Web 服务提供给桌面 View 应用程序

java - 杀死特定的java应用程序

java - 如何在 JAX-RS 应用程序中从基于 web.xml 的授权切换到通过注释进行授权

java - Java中的平台无关路径

java - Spring MVC RequestMapping 正在转发

c - 在部署新代码或热插拔代码时维护套接字连接?

python - 使用 Chapel 处理海量矩阵

java - 在单线程环境中管理 java 中的 Sqlite 连接以提高性能

ruby-on-rails - 洗劫 gem、ActiveResource 和 REST API

Python Post 调用抛出 400 Bad Request