标签: eventual-consistency

最终与erlang一致的mnesia数据库.最好的做法是谁?

我在erlang写了一个bittorrent跟踪器.鉴于服务的性质,我不需要绝对的一致性(即客户可以完全满意稍微过时的同行列表或torrent状态).

到目前为止,我的策略是在启用了disc_copies的情况下在RAM中创建mnesia表,以便在日志大小超过特定大小时让mnesia自动将内存转储到磁盘.

如果服务器崩溃,某些信息将丢失.没有大碍.

另一种方法是实例化两个表(仅一个ram和一个磁盘),并且每分钟左右都有一个从ram到磁盘的进程副本.这更天真,但是只允许转储内存中的一部分,减少整体磁盘开销,并可能完全避免使用日志(我实际上不确定这最后的语句).

我确信还有很多其他方法可以做到这一点.你的是啥呢?

-TeO

erlang mnesia eventual-consistency

5
推荐指数
1
解决办法
1362
查看次数

是否有任何通用算法可实现分布式系统的最终一致性?

是否有任何算法通常用于实现分布式系统中的最终一致性?

有一些算法是为分布式系统中的ACID事务开发的,特别是Paxos,但是有一个类似的理论体系是为BASE场景开发的,具有较弱的一致性保证吗?

编辑:这似乎是一个刚刚开始发展的学术研究领域.Mcdowella的回答表明,该领域至少有一些工作.

algorithm distributed consistency eventual-consistency

5
推荐指数
1
解决办法
1501
查看次数

任何人都知道在使用最终一致的数据更新时保持用户界面一致的良好模式

场景是一个包含联系人列表的网格.用户点击网格中的"发送电子邮件",发送电子邮件.我们在队列中删除一条消息来更新一些聚合(它们也显示在列表中).

问题是在发送电子邮件之后,聚合不能保证更新.

我们可以使用javascript更新计数,但如果他们刷新页面并且聚合尚未完成呢?

c# user-interface message-queue eventual-consistency

5
推荐指数
1
解决办法
151
查看次数

与Cassandra数据模型的交易

根据CAP理论,Cassandra最终只能具有一致性.更糟糕的是,如果我们在一次请求中有多次读写而没有正确处理,我们甚至可能失去逻辑一致性.换句话说,如果我们快速做事,我们可能做错了.

同时,为Cassandra设计数据模型的最佳实践是考虑我们将要拥有的查询,然后添加一个CF. 通过这种方式,添加/更新一个实体意味着在许多情况下更新许多视图/ CF. 没有原子事务功能,很难做到正确.但有了它,我们又失去了A和P部分.

我不认为这涉及很多人,因此我想知道为什么.

  • 这是因为我们总能找到一种方法来设计我们的数据模型,以避免在一个会话中进行多次读写操作吗?
  • 这是因为我们可以忽略"正确"部分吗?
  • 在实际操作中,我们总是在中间的某处有ACID功能吗?我的意思是可能在应用层实现或添加中间件来处理它?

consistency eventual-consistency cassandra

5
推荐指数
1
解决办法
826
查看次数

Eventualy一致的分布式数据库与幂等增加运算符?

是否存在分布式高可用性,最终是一致的db,它支持标量值的幂等操作?

如果我们使用正常更新,那么我们可能会在不同节点上有2个不同的值,并且没有一个值是正确的,因为我们需要通过两个事务值来增加金额.

是否有分布式数据库,我可以发送命令增加(键,属性[列],差异),以便当我收到响应时,我可以确定该操作将在其他副本上执行,无论帐户的当前值如何?通过这种方式,即使两个不同的节点增加了不同的值,我也将具有增加操作的最终一致性,因为该增加将传播到其他副本.

我不是在讨论条件更新,因为它不适用于cassandra这样的高可用性db(这就是为什么它们没有这个功能),我对原子增加操作感兴趣.

谢谢.

PS在幂等增加的情况下,我会有一个命令增加(key,attribute,diff,lock_key),这样如果db已经收到相同的lock_key相同的命令,db就不会增加

TL;博士:

有没有办法在分布式AP类数据库中制作精确的计数器?2个问题:1)如果我发送操作来增加一个计数器并且我没有得到响应,我会再次发送该请求,但不想两次增加计数器.2)如果该计数器在另一个副本上同时更新,我希望最终合并这个增加,而不是覆盖这些值.那么是否有像增加("John的余额",+ 5.67,"sdfsdfas")这样的命令,其中sdfsdfas是用于丢弃重复更新的字符串.是否有一个db复制这种命令?

database high-availability eventual-consistency cassandra nosql

5
推荐指数
1
解决办法
952
查看次数

CloudSearch中的一致读取

CloudSearch的结果只是最终一致的.

在我的95%的应用程序中,这是它提供的性能和冗余的可接受的权衡.

在最后的5%中,我发现自己发布了一个新的SDF文档,然后立即运行一个查询,我需要反映我刚刚做的POST.

目前,我有一个拼凑在一起的解决方案,涉及轮询CloudSearch,直到结果符合我的预期,直接在POST之后.不幸的是,当我有多个用户时,这会产生许多问题,包括与额外读取相关的成本($)增加到竞争条件.

处理这种情况有什么最佳做法吗?

来自AWS论坛的xpost:https://forums.aws.amazon.com/thread.jspa?messageID = 470636񲹬

编辑:有关我的具体用例的其他信息.

我正在搜索带有大量布尔查询的搜索结果,我希望能够更新一个或多个文档,使它们不再出现在查询中,然后刷新视图以显示结果.

具体来说,我有一堆带有布尔值的文档,标记为"已归档"

当我在未归档的视图中查看它们,然后将它们标记为已归档时,我希望能够刷新视图而不显示这些项目.

我也使用CloudSearch进行排序/过滤/分页,这使得插入或修改本地副本变得很困难

consistency eventual-consistency amazon-web-services amazon-cloudsearch

5
推荐指数
0
解决办法
584
查看次数

CQRS读取侧,多个事件流主题,并发/竞争条件

我遇到了(重新)在读/查方面以正确顺序应用来自多个主题的事件的问题.

例:

在写/命令端,我们有2个具有n:m关系的聚合:

  • 联系

这些聚合在2个单独的事件流主题上产生以下事件(因为最佳实践说:每个聚合一个主题.我完全同意):

  • 联系主题:

    1. ContactCreated (contactId: "123", name: "Peter")
    2. ContactAddedToGroup (contactId: "123", groupId: "456")
  • 小组主题:

    1. GroupCreated (groupId: "456", name: "Customers")

在读取/查询方面(例如Elasticsearch)我想执行此查询:

  • 查找属于以名称开头的任何组的所有联系人 Custo...
  • 找到所有以名称开头的组Custo... (这应该不是问题)

为此,有2种读取模型.示例数据:

  • {contactId: "123", name: "Peter", groups: [{id: "456", name: "Customers"}]}
  • {groupId: "456", name: "Customers"}

问题:

事件顺序只能保证单个事件主题(如在Apache Kafka中).虽然3个活动可以通过多种方式读/查询侧消耗:1,2,31,3,23,1,2

怎么处理1,2,3数据库伪语句示例:

  1. INSERT Contact (contactId: "123", name: "Peter")
    • FIND Group WHERE (groupId: "456") (不起作用,因为尚未插入组)
    • UPDATE Contact WHERE (contactId: "123") ADD …

concurrency eventual-consistency race-condition cqrs event-sourcing

5
推荐指数
1
解决办法
703
查看次数

如何在基于DDD的应用程序中实现检出?

首先,让我们说一个电子商务网站上有两个独立的汇总购物订单

Basket聚合有两个实体Basket(这是聚合根)和BaskItem定义如下(为简单起见,我删除了工厂和其他聚合方法):

public class Basket : BaseEntity, IAggregateRoot
{
    public int Id { get; set; }

    public string BuyerId { get; private set; }

    private readonly List<BasketItem> items = new List<BasketItem>();

    public  IReadOnlyCollection<BasketItem> Items
    {
            get
            {
                return items.AsReadOnly();
            }
     }

}

public class BasketItem : BaseEntity
{
    public int Id { get; set; }

    public decimal UnitPrice { get; private set; }

    public int Quantity { get; private set; } …
Run Code Online (Sandbox Code Playgroud)

c# domain-driven-design eventual-consistency aggregateroot

5
推荐指数
1
解决办法
307
查看次数

RavenDB中WaitForNonStaleResultsAsOfNow的范围是什么

如果我在现有的RavenDB会话上运行以下查询:

var result = session.Query<Location>()
               .Customize(x => x.WaitForNonStaleResultsAsOfNow())
               .Where(l => l.Name = "Home" && !l.Deleted);
Run Code Online (Sandbox Code Playgroud)

RavenDB等待哪些索引?我的假设是它等待查询时所有索引都是最新的; 但是,这是否意味着如果Location其他表上只有一个动态索引而是20个索引,那么我们总是在等待21个索引更新?

或者,我是否误解了该方法的功能?

c# indexing eventual-consistency ravendb

4
推荐指数
1
解决办法
515
查看次数

微服务架构如何实现即时一致性?

例如 amazon.com;他们依赖于微服务架构,并且订单和付款可能是单独的微服务,但是当您在 amazon.com 上结帐订单时,您最终可以看到订单 ID 和详细信息。如果这不是最终一致性方法,那是什么?也许是2PC?

我正在概括我的问题;如果最终一致性不适合业务事务(最终用户应该看到事务结束的结果)但单独的微服务有意义(例如订单和付款)怎么办?如何处理即时一致性?

distributed-transactions eventual-consistency microservices

4
推荐指数
1
解决办法
799
查看次数