How to beat the CAP theorem (2011)
nathanmarz.com
nathanmarz.com
How to beat the CAP theorem - https://news.ycombinator.com/item?id=3108087 - Oct 2011 (77 comments)
.. nathanmarz on Oct 13, 2011 | parent | next [–]
I never said anywhere that it provides strong consistency.
..
Click-bait then, same now.
C+P + Google-implied A. (Or C+A + chance of P approaching zero.)
https://static.googleusercontent.com/media/research.google.c...
[0]: https://fauna.com/
[1]: https://fauna.com/blog/distributed-consistency-at-scale-span...
> https://www.cs.umd.edu/~abadi/
> He is best-known for the development of the storage and query execution engines of the C-Store (column-oriented database) prototype, which was commercialized by Vertica and eventually acquired by Hewlett-Packard in 2011, for his HadoopDB research on fault tolerant scalable analytical database systems which was commercialized by Hadapt and acquired by Teradata in 2014, and deterministic, scalable, transactional, distributed systems such as Calvin which is currently being commercialized by Fauna.
That is as an impressive of a resume as I have ever seen. Dude spawned 3 successful commercial database offerings.
But this strict notion of Availability (all nodes must be available), was conflated with being available at all, leading to CP systems being disfavored.
When we introduced Fauna, it took quite some time (and a Jepsen report) to convince others that building a CP system without exotic hardware was possible, and that in practice, access to multi-region strongly consistent replication is a far better availability experience than the typical single region deployment topology which is still most common today.
There's also nothing stopping systems from accepting commutative writes, and hence being available for writes on both sides. Similarly, if the system accepts no writes it can accept reads on both sides without breaking the law.
I could be wrong but I think it’s: To serve a read from a replica in region X, where the write replica is in region Y s.t. there is a partition between X and Y, I’m pretty sure in the normal case X does not need to wait for Y to tell it to let the read go. Instead Y locks X on-write to implement consistency. So in the case of a partition X still does not wait for Y to execute a read, but writes become unavailable.
It does make me wonder about log append only stores. Why is it a linear log at all? That is one of the problems OP is talking about when the partition heals and you need to merge two disparate logs.
But why? Why not use an order independent data structure like a set? Adding facts to two independent sets and then union the two sets results in the same set. I suspect the reason is, we haven’t found a good way to store sets. We only figured out how to store things linearly
> But why? Why not use an order independent data structure like a set? Adding facts to two independent sets and then union the two sets results in the same set. I suspect the reason is, we haven’t found a good way to store sets. We only figured out how to store things linearly
No, the reason is the opposite. Storing sets is easy, but encoding everything we might want to store as a set is difficult. E.g. it's very common to want to store a list and want to be able to append items to the list and retrieve it in order. Doing that on top of a linear log store is trivial; doing it on top of a set store is hard if not impossible.