<html><head><style>body{font-family:Helvetica,Arial;font-size:13px}</style></head><body style="word-wrap:break-word"><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto">I have some experience with Cassandra, and based on your description of your needs it sounds like Cassandra would be overkill. I think you could make it work, but it may not be worth the effort.</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto"><br></div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto">Cassandra uses a ring architecture similar to Riak. Reads and writes happen on multiple nodes and the entire transaction doesn't succeed until it has succeeded on a certain number of nodes. For your read-heavy workload you would probably want to set that value higher for writes and lower for reads. For example, you might say that a write happens on 3 nodes and succeeds when it is successful on all of those nodes. You might feel safe then saying that a read only needs to succeed on one node to be successful. This is something you would definitely want to test thoroughly so that you understand the performance tradeoffs of changing those values.</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto"><br></div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto">Also, recent versions of Cassandra have adopted a table model and query language (CQL) that are superficially similar to RDBMS tables and SQL, but are actually completely different. This led to a lot of cognitive dissonance for my team as we would do things that made sense for an RDBMS, and that we could express in CQL, but were totally the wrong thing to do for Cassandra's architecture.</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto"><br></div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto">Personally, I would look at Riak before Cassandra if you think that the ring architecture makes sense for you. Because it doesn't have the trappings of tables and a SQL-like language, we found it much more straightforward to reason about the strengths and limitations of the system. It is very much a straightforward key/value data store.</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto"><br></div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto">However, you mentioned read consistency being important, and Cassandra and Riak both trade off read consistency for availability. They are "eventually consistent" systems (<a href="https://en.wikipedia.org/wiki/Eventual_consistency">https://en.wikipedia.org/wiki/Eventual_consistency</a>). I suggest you read up on the CAP theorem (<a href="https://en.wikipedia.org/wiki/CAP_theorem">https://en.wikipedia.org/wiki/CAP_theorem</a>) and decide what tradeoffs you are willing to make before choosing a database. </div> <div><br></div><div>Good luck!</div><div><br></div><div>~phil</div><br><p class="airmail_on">On September 15, 2017 at 11:43:52 AM, code wiget (<a href="mailto:codewiget95@gmail.com">codewiget95@gmail.com</a>) wrote:</p> <blockquote type="cite" class="clean_bq"><span><div style="word-wrap:break-word" class=""><div></div><div>



<title></title>


Hello everyone,
<div class=""><br class=""></div>
<div class="">I am at the point where I have many Erlang nodes, and
I am going to have to move to a distributed database. Right now, I
am using a basic setup: each Erlang node has a copy of the same
Redis DB, and all of those DBs are slaves(non-writable copies) of a
master. A big problem with this is obvious - If the db goes down,
the node goes down. If the master goes down, the slaves won’t get
updated, so I would like to move to a distributed db that all of my
nodes can read/write to that can not/does not go down.</div>
<div class=""><br class=""></div>
<div class="">The nodes do ~50 reads per write, and are constantly
reading, so read speed and consistency is my real concern. I
believe this will be the node’s main speed factor.</div>
<div class=""><br class=""></div>
<div class="">Another thing is that all of my data is key/key/value
, so it would mimic the structure of ID -> name -> “Fred”,
ID->age->20, so I don’t need a SQL DB.</div>
<div class=""><br class=""></div>
<div class="">A big thing also is that I don’t need disc copies, as
a I have a large backup store where the values are generated
from.</div>
<div class=""><br class=""></div>
<div class="">I have looked at as many options as I can -></div>
<div class=""><br class=""></div>
<div class="">Voldemort : <a href="http://project-voldemort.com/" class="">http://project-voldemort.com/</a> </div>
<div class="">- looks perfect, but there are 0 resources on
learning how to use it outside of their docs and no Erlang driver,
which is huge because I would both have to learn how to write a c
driver and everything about this just to get it to
work. </div>
<div class=""><br class=""></div>
<div class="">Cassandra: <a href="http://cassandra.apache.org/" class="">http://cassandra.apache.org/</a></div>
<div class="">- looks good too, but apparently there is a small
community and apparently isn’t updated often</div>
<div class=""><br class=""></div>
<div class="">Scalaris: <a href="https://github.com/scalaris-team/scalaris/blob/master/user-dev-guide/main.pdf" class="">https://github.com/scalaris-team/scalaris/blob/master/user-dev-guide/main.pdf</a></div>
<div class="">- Looks very very cool, seems great, but there is 0
active community and their GitHub isn’t updated often. This is a
distributed all in-memory database, written in Erlang.</div>
<div class=""><br class=""></div>
<div class=""><br class=""></div>
<div class="">So from my research, which consisted heavily of this
blog:<a href="https://www.metabrew.com/article/anti-rdbms-a-list-of-distributed-key-value-stores" class="">https://www.metabrew.com/article/anti-rdbms-a-list-of-distributed-key-value-stores</a> ,
I have narrowed it down to these three.</div>
<div class=""><br class=""></div>
<div class="">BUT you are all the real experts and have built huge
applications in Erlang, what do you use? What do you have
experience in that performs well with Erlang nodes spread across
multiple machines and possibly multiple data centers?</div>
<div class=""><br class=""></div>
<div class="">Thanks for your time.</div>
<div class=""><br class=""></div>


_______________________________________________
<br>erlang-questions mailing list
<br><a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a>
<br><a href="http://erlang.org/mailman/listinfo/erlang-questions">http://erlang.org/mailman/listinfo/erlang-questions</a>
<br></div></div></span></blockquote></body></html>