【发布时间】:2010-06-22 14:42:30
【问题描述】:
在 SOA 中,我们不应该在客户端和服务器之间建立或保持状态(或设计依赖关系)。这是可以理解的。但是,如果客户端想要使用可能返回开放式“行”数的实时服务,可以遵循哪些模式?
Web 应用程序,类似于 SOA,但允许状态(会话)已通过分页解决了这个问题。分页要求(在大多数情况下,尤其是使用 SQL)服务器保存数据并且客户端以块的形式请求数据。
如果我们在哪里考虑 Web 服务的类似分页的场景,这些遵循哪些模式仍将允许遵循(或尽可能接近)SOA 的原则。
思想家的一些规则: 1) 由 SQL 数据库支持(因此在选择集中没有行号的概念) 2)在分页期间不要跳过一行或重复一组中的一行很重要 3) 其他客户端可以随时向数据库中插入和删除数据 4) 无需将数据集视为实时(可更新)数据集
就我个人而言,我认为上面的 1 和 2 已经通过将解决方案空间与需求限制在一起来拼写我们的解决方案。
我提出的解决方案是将数据(尽可能多地选择)存储在只读存储/缓存中,可以在结果集中为其分配一个行号,并允许在此数据快照上进行分页。我将拥有存储快照的基础设施(服务器、外部缓存、memcached 或 ehcache - 这必须非常大)。此类查询的结果将是快照 ID,客户端可以使用快照 API(Web 服务)和快照 ID 从快照中检索数据。在 x 是合理的时候,结果将以只读、只转发的方式处理 x 记录。
我们将不胜感激相互竞争的想法和想法、批评或赞誉。
【问题讨论】:
-
我会告诉你 twitter 如何处理他们的分页。这可能对你有帮助dev.twitter.com/rest/public/timelines
标签: web-services session pagination soa