GOPHERSPACE.DE - P H O X Y
gophering on hngopher.com
HN Gopher Feed (2017-12-06) - page 1 of 10
 
___________________________________________________________________
Antidote: CRDT-based distributed database
166 points by KirinDave
http://syncfree.github.io/antidote/
___________________________________________________________________
 
cmeiklejohn - 4 hours ago
Member of the SyncFree Consortium (and committer to Antidote)
here.Here's a video from J On The Beach this year on the details
around the Just-Right Consistency approach that might help answer
some questions: https://www.youtube.com/watch?v=Vd2I9v3pYpA
 
  cmeiklejohn - 4 hours ago
  Here's links to other things in the SyncFree group.Lasp
  (previously on HN):https://news.ycombinator.com/item?id=14300763h
  ttps://news.ycombinator.com/item?id=15444156SyncFree project
  review results:http://cordis.europa.eu/result/rcn/197514_en.htmlL
  egion:https://syncfree.lip6.fr/index.php/2-uncategorised/54-legio
  nSyncFree homepage:http://syncfree.lip6.fr
 
    cmeiklejohn - 4 hours ago
    Further follow-up: we're (members of the SyncFree consortium
    and it's follow up project for moving CRDTs, Antidote, and Lasp
    to the edge) considering raising money to industrialize
    Antidote (and it's associated tool chain) for building Just-
    Right Consistency applications.If you'd be interested in any of
    the above, or just using the database and/or trying the tools,
    reach out to me via email christopher.meiklejohn at gmail.com
    or cmeik on Twitter.
 
[deleted]
 
jnordwick - 1 hours ago
For anybody else wondering what CRDT means: conflict-free
replication datatype.https://en.m.wikipedia.org/wiki/Conflict-
free_replicated_dat...
 
marknadal - 4 hours ago
Hey, author of GUN (the current most popular generalizable CRDT
based database), and want to say I'm impressed. I'm often the first
to nitpick things but this looks great:- Built in Erlang- Great
explainer videos- Well documented CRDTs that you accept- Team of
university related researches in CRDTs.I'll be looking through your
guys stuff more. But good job! We need more people like you guys
out there.
 
  dang - 1 hours ago
  We detached this comment from
  https://news.ycombinator.com/item?id=15863587 and marked it off-
  topic.
 
Cieplak - 4 hours ago
Looking forward to Kyle Kingsbury?s Jepsen review.
 
  elvinyung - 4 hours ago
  Jepsen goes into detail about general CRDTs here:
  https://aphyr.com/posts/285-jepsen-riak
 
    lostcolony - 4 hours ago
    Yes, but devil's in the details. The fact CRDTs are provably
    able to have specific consistency guarantees doesn't mean a
    particular implementation does it correctly in all contexts.
    Without testing, "We built this (city) on CRDTs" isn't very
    useful.
 
      elvinyung - 4 hours ago
      Sure. My point is that it's a rough idea of what you could
      expect.If you look at the Jepsen posts for Cassandra and
      Riak, for example, you can see that the general
      characteristics are fairly similar.
 
      KirinDave - 4 hours ago
      What's nice about building databases on compositions of CRDTs
      is that if you can validate the individual CRDTs via
      automated testing, you have a very high degree of confidence
      the composition of those CRDTs will do something similar.No
      one's arguing that a Jepsen test shouldn't be done. Just that
      it'll probably be very different in character from more
      invented industry technology.
 
    OhDagny - 40 minutes ago
    yeah, this appears to be Riak, after Riak went kaboom, possibly
    with anti-customer CRDTs turned on by default rather than the
    other marketing-friendly modes.Until we get John Galt to
    release his all-knowing database that can authoritatively
    resolve all conflicts and avoid the evil socialist resolution
    of AP read conflicts from his hidden valley of 1000 men and 1
    woman, this will continue to be a hard problem.
 
      ramchip - 24 minutes ago
      I don?t think it?s Riak. It just uses riak_core, which is a
      kind of distribution / sharding framework. Riak itself has
      new owners and is not going away.
 
      cmeiklejohn - 19 minutes ago
      (former Basho engineer and committer on Riak and Antidote)No,
      it's not Riak.[Full disclosure: work was started in
      2013/2014, with Basho, as an alternative to Riak and shares
      Riak Core as a base.  At the time, Basho was a member of
      SyncFree.]It's built on Riak Core, but it's a lot different
      from Riak in many ways: no replication in the DC,
      transactions, more data-types, operation-based CRDTs and not
      state-based CRDTs, log vs. in-place replacement in the
      storage backend.I mean, the analogy is poor: it's even less
      close than saying that Riak is Cassandra and vice-versa.
 
[deleted]
 
davidw - 3 hours ago
I wonder what it looks like in terms of resource usage.I think
there's a strong case for something like this for IoT type devices.
Imagine the simple case of adding a name to a contact list on a
mobile device, and wanting that to get synced up with a series of
other devices.
 
  cmeiklejohn - 2 hours ago
  (committer on Antidote, author of Lasp, both SyncFree
  projects)Antidote is designed for DC deployments, in the hundreds
  of clusters.  It provides causal consistency and
  transactions.Lasp is designed for high-churn, edge deployments
  (with CRDTs) and provides eventual consistency: it's designed for
  1,000+ nodes.They share a bit of code, and you might want to
  evaluate both to determine which is a better use case: Lasp might
  be a better fit for the IoT application, because it was designed
  for that.Here's a HN post on Lasp's
  scalability:https://news.ycombinator.com/item?id=15444156Here's a
  HN post on Lasp:https://news.ycombinator.com/item?id=14300763
 
  Xeoncross - 3 hours ago
  It's written in erlang so should be better ram usage than a Java
  database.
 
    cmeiklejohn - 1 hours ago
    I wouldn't say "better"; I'd probably say that the memory
    profile would be completely different.  It all depends on the
    number of actors, the size of objects, and the workload.
    Remember: for large binary objects, references on a shared heap
    are sent and messages are not explicitly copied per actor.
    This means it's dependent on the workload and both the
    structure of how many processes are involved in a single
    request.
 
ShabbosGoy - 3 hours ago
Can anyone explain the advantages/disadvantages of using CRDTs over
OT (operational transformation)?
 
  marknadal - 3 hours ago
  OT requires a centralized server for intention resolution.CRDT
  does not. It can be fully P2P.
 
dqv - 2 hours ago
Does anyone have this compiling on Erlang 20?
 
  anne_biene - 2 hours ago
  We tried a couple of weeks back, but then most dependencies have
  not been upgraded yet. The problem is that, to my knowledge,
  there is no riak_core for Erlang 20.
 
    cmeiklejohn - 2 hours ago
    I suggest that you build on top of the Riak Core from Heinz
    Gies.  That's what we are using in some of our new projects.
 
      anne_biene - 2 hours ago
      This is what we actually do. I checked a couple of weeks ago
      with Heinz, but there wasn't a version available (but maybe I
      misunderstood him...).Can you point me to an Erlang 20
      compatible version?
 
        cmeiklejohn - 1 hours ago
        Ah, we might be pulling a branch for our Riak Core work.  I
        can look into it tomorrow and get back to you.
 
xinsight - 4 hours ago
The video lists pros/cons for strongly consistent and eventually
consistent databases, but only has pros for a "just right
consistency" database. What are the cons?
 
  gjem97 - 4 hours ago
  Limited support for
  datatypes?http://syncfree.github.io/antidote/crdts.html
 
  joaomlneto - 4 hours ago
  The idea of the "just right consistency" is that it brings the
  best of both worlds, without any drawbacks.Your application works
  as well as if it was executed fully in strong consistency, but
  with improved scalability for the set of operations that can
  execute in an eventual consistent
  model.https://www.youtube.com/watch?v=HJjWqNDh-GA
 
    erik_seaberg - 4 hours ago
    The biggest drawback is that only some operations can be
    supported. E.g., without strong consistency you can detect
    double-spending from an account but you can't prevent it,
    because the validity of an operation can't depend on operations
    a datacenter hasn't seen.
 
      KirinDave - 4 hours ago
      Financial examples are bad because in fact the financial
      world IS eventually consistent. It's quite possible to
      withdraw the same $100 from an account via multiple ATM
      machines.
 
        nine_k - 3 hours ago
        With ATMs and debit cards, I thinks it's generally not
        true, they seem to use the online mode and update the
        balance of a checking account within seconds.With credit
        cards, you can indeed start more transactions against the
        same balance, and you're never sure in which order they
        will complete.
 
          KirinDave - 3 hours ago
          Gonna repeat, it is DEFINITELY possible to spend the same
          money multiple times with one ATM card, using old ATM
          machines with other payment methods.No, I will not
          further detail how here.
 
          spooneybarger - 1 hours ago
          I can verify this is possible.
 
          nine_k - 2 hours ago
          Interesting! A bit or research in this area may literally
          pay :)
 
          readams - 1 hours ago
          you can do this but the bank will know and the police
          will show up.
 
          KirinDave - 45 minutes ago
          I don't mean to endorse such behavior, but the folks who
          used a loophole after stealing my ATM card details from a
          data breach never got caught using a variety of ApplePay
          based variants of this attack (now fixed, btw).In general
          folks who get serious about it never get caught. Which is
          why folks who give a damn about the world don't talk
          about specifics on public forums.
 
          erik_seaberg - 3 hours ago
          When a payment processing system doesn't promptly cancel
          auth holds, customers definitely complain about being
          prevented from spending their money. This stuff should be
          table stakes but some retail banks are just way behind.
 
          KirinDave - 2 hours ago
          That is the reverse problem. Flippin' gas stations STILL
          have a problem with this that you feel acutely because
          the large holds. A similar problem exists with hotels,
          where they'll put a lock on a ton of money in your
          account.
 
    marknadal - 3 hours ago
    Great video. I'm impressed you guys built the checker tool,
    that isn't an easy task - we built something similar called
    PANIC (https://github.com/gundb/panic-server) that lets us
    simulate failure cases and then run the test across a
    distributed system to see if it passes.I had a question, in the
    video at a certain point you say that you must modify the code
    to disallow concurrent debits. This makes sense in theory, but
    wouldn't it fail in practice? If two machines in different
    regions are running this code, they would not know that there
    is a concurrent debit. How si that addressed?
 
continuational - 3 hours ago
How would I do a "put if absent" in this database? Is it efficient?
 
skrebbel - 4 hours ago
At first glance, this looks amazing. I truly believe CRDTs are the
solution to lots of distributed systems problems, and that exposing
their characteristics to developers directly, rather than trying to
abstract them away in nicer, but leaky, abstractions, is the right
way to go.That said, a major part of why databases are hard is that
reliable storage is hard. I see remarkably little about this on
Antidote's homepage. I'd wish this was just a frontend to some
battle tested storage engine but it appears that this is not the
case.
 
  nine_k - 4 hours ago
  It appears to use Riak as the storage layer.
 
    skrebbel - 3 hours ago
    Ah great! That makes this very cool all of a sudden. How did I
    miss that?
 
    cmeiklejohn - 3 hours ago
    (committer here)It uses Riak Core as the underlying
    distribution layer, which is the same that Riak itself uses.
    For storage of the log, the built-in Erlang disk_log is used.
 
kevmo314 - 4 hours ago
This has that "too good to be true" vibe, and I can't find much
information on the authors or the Syncfree Consortium organization
that backs the project besides their own website.Is this at the
cost of fast writes or flexible schema? The pitch video doesn't
seem to mention any cons, yet seems to avoid mentioning the type of
data or mutations supported. I guess I'll go read their
publications.
 
  gjem97 - 4 hours ago
  I think the issue you're looking for is a limited number of
  supported datatypes.  This doesn't appear to be a general-purpose
  database at the moment: don't expect to drop it in as a
  replacement for MySQL.  Doesn't mean it can't be in the future,
  but it would have to fall back on other techniques for the
  datatypes that can't be built with
  CRDTs.http://syncfree.github.io/antidote/crdts.html
 
    lopatin - 4 hours ago
    I think the data types look fine. If I'm using such a database,
    I don't think I want the CRDT data types to be abstracted away
    behind some general-purpose (SQL?) interface. Can that even be
    done? I'd rather just pay the small price of restructuring my
    data into maps and sets and have the CRDT database do the rest
    without any extra indirection.
 
  dustingetz - 4 hours ago
  I don't think it encodes a graph that you query (like, say, Neo4J
  or Postgres with an orm); it seems to give various replicated
  data structure primitives, like documents, basically a kv store?
  So for building something like google docs.
 
    nine_k - 4 hours ago
    One glaring omission is indexes.You can likely  build something
    SQL-like to form complex queries coordinating related objects,
    but the efficiency of such queries is not a given. You can
    likely manually build something like an index to speed up
    lookups using e.g. the map primitive. With a plan for a complex
    query, you're on your own.Another likely problematic part is PK
    generation. You can of course use a counter, but I'm not sure
    how efficient will it be with burst inserts. For that, you'd
    have to come up with client-generated PKs that are unlikely to
    clash, e.g. UUIDs.
 
      anne_biene - 2 hours ago
      (one of the maintainers of Antidote)There is a lot of
      research still going on in the back, including indexing,
      access control, verification tools for apps, and some other
      really cool stuff.Efficient support for queries is non-
      trivial, indeed.
 
  KirinDave - 4 hours ago
  It's a government sponsored project so one would expect their
  publicity to be limited. That's part of the reason I posted it.
  Stuff like this is extremely exciting.It's at the cost of playing
  by the rules of CRDTs. Making CRDTs consequence-free is ongoing
  research.
 
    teleclimber - 3 hours ago
    > Making CRDTs consequence-free is ongoing research.What do you
    mean by that?I found possibly related language on this page the
    other day [0]:CRDTs are "[t]ypically not suited for editing
    application with consequent UI."Can you point me in the right
    direction? My googling got me nowhere. Thanks.[0]
    https://irisate.com/collaborative-editing-solutions-round-up...
 
      KirinDave - 2 hours ago
      I dunno about that quote, Treedoc works pretty well.In
      general there are tradeoffs to CRDTs and not everyone loves
      those tradeoffs. As time goes on we find CRDTs that make
      better tradeoffs.For example, the earliest examples of CRDT
      sets grew linearly with the values added to the set, without
      regard for deletion. For all time. That's a pretty steep
      cost.
 
        teleclimber - 1 hours ago
        I get it, thank-you.
 
fiatjaf - 3 hours ago
I wanted a database that would receive "events" asynchronously and
stored that, but at the same time would process these events (from
some piece of previously written code) to generate a queryable
schema.If I wanted to change the schema later, the database would
let me just rewrite the code and it would reprocess all the
received events since the beggining.My use case is not anything
high-performance or with thousands of writes -- it's the opposite.
 
shalabhc - 1 hours ago
Related ideas exist in David Reed's 'Atomic Actions' which use
pseudotime: http://www.cs.sfu.ca/~vaughan/teaching/431/papers/reed8
3.pdf:"thinking about objects as sequences of unchangeable
versions, object histories""the correct construction and execution
of a new atomic action can be accomplished without knowledge of all
other atomic actions in the system that might execute
concurrently"Is anyone aware of comparisons between these two
streams of ideas (pseudo time based action and CRDT based)?