<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="236741" data-post-id="236741">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="cmo" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/cmo/120/19618_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  cmo
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="onebox allowlistedgeneric" data-onebox-src="https://rabbitmq.github.io/khepri/overview-summary.html">
  <header class="source">
      <img src="https://rabbitmq.github.io/khepri/khepri-favicon.svg" class="site-icon" alt="" width="256" height="256">

      <a href="https://rabbitmq.github.io/khepri/overview-summary.html" target="_blank" rel="noopener nofollow ugc">rabbitmq.github.io</a>
  </header>

  <article class="onebox-body">
    

<h3><a href="https://rabbitmq.github.io/khepri/overview-summary.html" target="_blank" rel="noopener nofollow ugc">The Khepri Database</a></h3>



  </article>

  <div class="onebox-metadata">
    
    
  </div>

  <div style="clear: both"></div>
</aside>
 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="236741" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/ram-an-in-memory-distributed-kv-store/44735/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-236741" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="236741"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #11"></div>
  </section>
</div>
    <div class="postbit" id="236763" data-post-id="236763">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="ostinelli" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/ostinelli/120/25204_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  ostinelli
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<blockquote>
<p>The library behind it, <code>ra</code> , implements <a href="https://raft.github.io/" rel="noopener nofollow ugc">raft consensus algorithm </a> so it’s consistent.</p>
</blockquote>
<p>The decision is consistent, but the data still needs to propagate to the cluster if I’m understanding this correctly. If so, wouldn’t this make it eventual consistent?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="236763" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/ram-an-in-memory-distributed-kv-store/44735/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-236763" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="236763"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #12"></div>
  </section>
</div>
    <div class="postbit" id="236764" data-post-id="236764">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="ostinelli" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/ostinelli/120/25204_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  ostinelli
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<blockquote>
<p><a href="https://rabbitmq.github.io/khepri/overview-summary.html" rel="noopener nofollow ugc">https://rabbitmq.github.io/khepri/overview-summary.html </a></p>
</blockquote>
<p>It’s an on-disc database if I’m not mistaken.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="236764" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/ram-an-in-memory-distributed-kv-store/44735/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-236764" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="236764"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #13"></div>
  </section>
</div>
    <div class="postbit" id="236776" data-post-id="236776">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="fabriziosestito" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/fabriziosestito/120/25206_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  fabriziosestito
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<blockquote>
<p>The decision is consistent, but the data still needs to propagate to the cluster if I’m understanding this correctly. If so, wouldn’t this make it eventual consistent?</p>
</blockquote>
<p>No, because Raft will wait for the majority of nodes to have replied to the append entry call prior acking to the client. If nodes cannot reach a majority it will not handle the write request.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="236776" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/ram-an-in-memory-distributed-kv-store/44735/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-236776" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="236776"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #14"></div>
  </section>
</div>
    <div class="postbit" id="236793" data-post-id="236793">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="ostinelli" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/ostinelli/120/25204_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  ostinelli
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>majority ≠ all. The question is whether, during a transaction, some nodes might be updated and others not <em>yet</em> when a read operation takes place. If reads can temporarily return different values while waiting for propagation, it would be eventually consistent, not strongly consistent. This has nothing to do with the decision mechanism which provides consistency, but with the propagation (eventual vs strong).</p>
<p>I simply don’t know what is the mechanism Raft implements to avoid such a case, hence my question.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="236793" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/ram-an-in-memory-distributed-kv-store/44735/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-236793" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="236793"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #15"></div>
  </section>
</div>
    <div class="postbit" id="236796" data-post-id="236796">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="fabriziosestito" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/fabriziosestito/120/25206_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  fabriziosestito
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="ostinelli" data-post="16" data-topic="44735">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/ostinelli/48/25204_2.png" class="avatar"> ostinelli:</div>
<blockquote>
<p>majority ≠ all.</p>
</blockquote>
</aside>
<p>The read and writes always pass through the leader, raft ensures the strongest form of consistency  (linearizability).<br>
I can only suggest to read the Raft paper and see if it fits whatever use-case scenario you have in mind.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="236796" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/ram-an-in-memory-distributed-kv-store/44735/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-236796" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="236796"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #16"></div>
  </section>
</div>
    <div class="postbit" id="236799" data-post-id="236799">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="ostinelli" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/ostinelli/120/25204_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  ostinelli
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Ok then, that’s the answer: Raft uses leader election for both writes <em>and</em> read operations. It’s a choice. <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="236799" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/ram-an-in-memory-distributed-kv-store/44735/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-236799" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="236799"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #17"></div>
  </section>
</div>
    <div class="postbit" id="237181" data-post-id="237181">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="IvanR" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/IvanR/120/25095_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  IvanR
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><a class="mention" href="/u/ostinelli" rel="nofollow">@ostinelli</a> is it a bad idea to ask you to run Yahoo! Cloud Serving Benchmark (YCSB) <a href="https://github.com/brianfrankcooper/YCSB/wiki" class="inline-onebox" rel="noopener nofollow ugc">Home · brianfrankcooper/YCSB Wiki · GitHub</a> on Ram to compare with other solutions (like Redis, etc)?</p>
<p>Like this one <a href="http://highscalability.com/blog/2021/2/17/benchmark-ycsb-numbers-for-redis-mongodb-couchbase2-yugabyte.html" class="inline-onebox" rel="noopener nofollow ugc">Benchmark (YCSB) numbers for Redis, MongoDB, Couchbase2, Yugabyte and&nbsp;BangDB - High Scalability -</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="237181" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/ram-an-in-memory-distributed-kv-store/44735/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-237181" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="237181"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #18"></div>
  </section>
</div>
    <div class="postbit" id="237455" data-post-id="237455">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sebp" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sebp/120/24270_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sebp
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="fabriziosestito" data-post="17" data-topic="44735">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/fabriziosestito/48/25206_2.png" class="avatar"> fabriziosestito:</div>
<blockquote>
<p>rizabi</p>
</blockquote>
</aside>
<p>If it can help for inspiration, other people invested a lot of time building databases on top of Raft to provide performances, scale and consistency: Cockroach DB folks did a good job at explaining their design. They organize the data in “ranges”, stored within Raft member groups (the idea is to not have a single group for all the data, to spread the impact of members joining or leaving to only subsets of data), it also spreads the load to many raft leaders (one leader for each range) to distribute the load.</p>
<p>You can read more about in their docs <a href="https://www.cockroachlabs.com/docs/stable/architecture/replication-layer.html#raft" class="inline-onebox" rel="noopener nofollow ugc">Replication Layer</a>  (all that range thing is described with more details in the cockroach University learning modules)</p>
<p>It’s not Elixir/Erlang, but these ideas are language agnostic.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="237455" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/ram-an-in-memory-distributed-kv-store/44735/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-237455" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="237455"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #19"></div>
  </section>
</div>
    <div class="postbit" id="237463" data-post-id="237463">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="ostinelli" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/ostinelli/120/25204_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  ostinelli
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group quote-modified" data-username="IvanR" data-post="19" data-topic="44735" data-full="true">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/ivanr/48/25095_2.png" class="avatar"> IvanR:</div>
<blockquote>
<p><a class="mention" href="/u/ostinelli" rel="nofollow">@ostinelli</a> is it a bad idea to ask you to run Yahoo! Cloud Serving Benchmark (YCSB) <a href="https://github.com/brianfrankcooper/YCSB/wiki" rel="noopener nofollow ugc">Home · brianfrankcooper/YCSB Wiki · GitHub </a> on Ram to compare with other solutions (like Redis, etc)?</p>
<p>Like this one <a href="http://highscalability.com/blog/2021/2/17/benchmark-ycsb-numbers-for-redis-mongodb-couchbase2-yugabyte.html" rel="noopener nofollow ugc">Benchmark (YCSB) numbers for Redis, MongoDB, Couchbase2, Yugabyte and BangDB - High Scalability - </a></p>
</blockquote>
</aside>
<p>Are all of the database in this benchmark strongly consistent? It feels a little like comparing apple and peers. For instance BangDB has a tunable consistency. My simple library requires 100% confirmation, and also copies all of the data on every node, which of course comes with a cost.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="237463" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/ram-an-in-memory-distributed-kv-store/44735/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-237463" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="237463"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #20"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/44735/load_more?page=3">Load more posts (21 remaining)</a>
</div></template></turbo-stream>