Architecture REST应用程序、事务、缓存丢弃

Architecture REST应用程序、事务、缓存丢弃,architecture,rest,caching,transactions,Architecture,Rest,Caching,Transactions,我正在用php构建RESTAPI,上面是memcache层,用于缓存所有资源。经过一段时间的阅读/体验,最好是文档尽可能简单…主要是因为删除了缓存序列 因此,如果“房间”文档中有“建筑”、“房间”实体,我只会放置“建筑”的id,而不是它的全部数据。然后在api客户端,我会根据需要合并数据 当我需要更新/插入(大多数情况下不止一个表)时,问题就出现了。我更新了一个资源,但在第二次更新时,系统出现了故障或其他问题,导致数据库不一致 我看到了几种解决方案: 实现rest事务,我发现它是错误的和复杂的,

我正在用php构建RESTAPI,上面是memcache层,用于缓存所有资源。经过一段时间的阅读/体验,最好是文档尽可能简单…主要是因为删除了缓存序列

因此,如果“房间”文档中有“建筑”、“房间”实体,我只会放置“建筑”的id,而不是它的全部数据。然后在api客户端,我会根据需要合并数据

当我需要更新/插入(大多数情况下不止一个表)时,问题就出现了。我更新了一个资源,但在第二次更新时,系统出现了故障或其他问题,导致数据库不一致

我看到了几种解决方案:

  • 实现rest事务,我发现它是错误的和复杂的,因为它的想法是无状态的和简单的

  • 在执行更新/插入操作时,我会传递更复杂的数据(而不是单个实体),以便在API级别强制执行事务。但这会让GET文档结构与PUT文档结构相同变得很奇怪。又一次,不知何故,使放置顺序变得复杂

  • 任何指点都是非常受欢迎的。
    干杯,

    您想做的是:

    客户端代理缓存(如Squid)REST接口memcached域模型

    如果充分利用HTTP缓存,可能根本不需要memcached层。缓存失效是一个需要解决的棘手问题,HTTP有很多规则和机制可以让您保持清醒。我对memcached不是很熟悉,但在谷歌上快速搜索一下这个主题似乎表明,您需要推出自己的缓存失效策略。HTTP还有一个额外的好处,就是能够在客户端缓存内容

    如果客户机需要同时更新多个域对象,则需要在REST接口中创建表示虚拟“复合”对象的资源。客户端应该只感知到他们正在更新单个资源。如果愿意,可以在后台更新数据库事务中的多个资源


    如果您将资源映射到您的应用程序,REST系统更容易创建。大多数人犯的错误是试图将REST资源严格映射到域对象。这可能有密切的关系,但它不会是一个直接的映射,除非你有一个非常无聊的应用程序

    您想做的是:

    客户端代理缓存(如Squid)REST接口memcached域模型

    如果充分利用HTTP缓存,可能根本不需要memcached层。缓存失效是一个需要解决的棘手问题,HTTP有很多规则和机制可以让您保持清醒。我对memcached不是很熟悉,但在谷歌上快速搜索一下这个主题似乎表明,您需要推出自己的缓存失效策略。HTTP还有一个额外的好处,就是能够在客户端缓存内容

    如果客户机需要同时更新多个域对象,则需要在REST接口中创建表示虚拟“复合”对象的资源。客户端应该只感知到他们正在更新单个资源。如果愿意,可以在后台更新数据库事务中的多个资源

    如果您将资源映射到您的应用程序,REST系统更容易创建。大多数人犯的错误是试图将REST资源严格映射到域对象。这可能有密切的关系,但它不会是一个直接的映射,除非你有一个非常无聊的应用程序