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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>You guys are uncovering another bullet point on my list of why I dislike these things <img src="https://forum.elixirforum.com/images/emoji/apple/upside_down_face.png?v=15" title=":upside_down_face:" class="emoji" alt=":upside_down_face:" 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="356761" data-batch-url="/posts/batch_likers">
                        5
                      </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/what-are-the-remaining-gaps-in-the-elixir-ecosystem/69307/75">Post #74</a>
	                </div>
	            </div>
              <div id="likers-container-356761" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="356761"
                     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 #74"></div>
  </section>
</div>
    <div class="postbit" id="356768" data-post-id="356768">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="stevensonmt" data-post="73" data-topic="69307">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/stevensonmt/48/20503_2.png" class="avatar"> stevensonmt:</div>
<blockquote>
<p>I do think the function names are not consistent with normal Elixir conventions. Like <code>noreply/1</code> and <code>noreply!/1</code> are not analogous to <code>Map.fetch</code> and <code>Map.fetch!</code>. The <code>noreply</code>/<code>noreply!</code> pair do inverse things to their arguments (wrap vs unwrap) whereas <code>fetch</code>/<code>fetch!</code> do the same things and differ in how they handle errors.</p>
</blockquote>
</aside>
<p>It’s true that <code>noreply</code> and <code>noreply!</code> do opposite things, and I agree that it is not an ideal naming system. It <em>partially</em> follows the normal naming conventions in that <code>noreply!</code> will raise if it’s unwrapping a tuple that’s not <code>{:noreply, term()}</code>.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="356768" 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/what-are-the-remaining-gaps-in-the-elixir-ecosystem/69307/76">Post #75</a>
	                </div>
	            </div>
              <div id="likers-container-356768" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="356768"
                     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 #75"></div>
  </section>
</div>
    <div class="postbit" id="356772" data-post-id="356772">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>There is <a href="https://github.com/rabbitmq/khepri" rel="noopener nofollow ugc">Khepri</a>, <a href="https://riak.com/index.html" rel="noopener nofollow ugc">Riak</a> and <a href="https://github.com/OpenRiak" rel="noopener nofollow ugc">OpenRiak</a>, the <a href="https://www.couchbase.com/" rel="noopener nofollow ugc">Couch family of DB tech</a>, <a href="https://github.com/Vincent-lau/hypermnesia" rel="noopener nofollow ugc">Hypermnesia</a> (not much beyond poc stage), and probably I am missing a few. I think the BEAM is one of the ecosystems with most databases, tbf, what are you missing? I have used Mnesia in prod and yes, it’s a pain, you need to build a lot of boilerplate around it to keep it from corrupting your data for one reason or another, but Riak for example is fairly battle tested and works kind of out-of-the-box.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="356772" 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/what-are-the-remaining-gaps-in-the-elixir-ecosystem/69307/77">Post #76</a>
	                </div>
	            </div>
              <div id="likers-container-356772" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="356772"
                     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 #76"></div>
  </section>
</div>
    <div class="postbit" id="356781" data-post-id="356781">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="garrison" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  garrison
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>First of all thank you for replying <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"> I was hoping there would be some discussion on the topic after I posted, but the conversation went elsewhere.</p>
<p>First of all, I just want to point out that this is not necessarily “my opinion” that I’m arguing here. This point is indisputable: Elixir developers are <em>not</em> using BEAM databases. We’re pretty much all using Ecto with relational databases, particularly Postgres/SQLite. I would imagine Postgres users outnumber Mnesia users by at least a few orders of magnitude <em>in this community</em>. When I said we lacked “proper” databases, the word “proper” was doing a lot of work there.</p>
<p>I would say Riak is a “real” database, but architecturally my understanding is that <a href="https://github.com/basho/riak/blob/develop/doc/architecture.txt" rel="noopener nofollow ugc">it’s a clone</a> of Dynamo (the <a href="https://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf" rel="noopener nofollow ugc">original Dynamo</a> at that, not DDB).</p>
<p>This generation of distributed databases was born out of the early 2000s with BigTable and spread to DynamoDB, Cassandra, HBase, etc. The problem is that it’s now 2025, a full two decades later, and frankly these designs turned out to be a bit of an architectural dead end.</p>
<p>First of all, they partition data across machines with no affordances for atomic transactions across partitions (which were often of a limited size). As a result they offer virtually nonexistent consistency guarantees.</p>
<p>Second, because of the “distributed hash table” approach they fail to offer good support for range queries, which are extremely important for managing relational data. So as a result they also fail to offer a relational model, and <em>it is nearly impossible to implement the relational model on top of them</em>.</p>
<p>Modern “NewSQL” databases or transactional K/V stores (like FoundationDB) offer <em>much</em> better consistency guarantees and are built on top of a range-partitioned storage engine (not hash) so that they can perform range scans and implement the relational model. This tech is over a decade old (Spanner 2012, FDB early 2010s), so we’re not talking bleeding edge here. There is nothing like this on the BEAM to my knowledge, but if there is I would of course love to hear about it.</p>
<p>Finally, Khepri seems cool but as I understand it’s just a replicated (not scalable) K/V store which runs all operations through MultiPaxos (actually Raft). This architecture is maybe okay for the old “distributed lock table” approach (which is <a href="https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html" rel="noopener nofollow ugc">actually a terrible idea</a> btw), but it’s not appropriate for a “real” database for two reasons.</p>
<p>First, you still only have one table, so you can’t scale this approach to more than one core. And second, by running the log through MultiPaxos on every write you are eating double or triple round-trip latency to write, so it’s just going to be slow.</p>
<p>FoundationDB for example does not do this - there is <em>not even a two-phase commit</em> in the commit path. It’s a much better design.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="356781" data-batch-url="/posts/batch_likers">
                        4
                      </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/what-are-the-remaining-gaps-in-the-elixir-ecosystem/69307/78">Post #77</a>
	                </div>
	            </div>
              <div id="likers-container-356781" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="356781"
                     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 #77"></div>
  </section>
</div>
    <div class="postbit" id="356785" data-post-id="356785">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="garrison" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  garrison
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="spagyther" data-post="77" data-topic="69307">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/spagyther/48/34043_2.png" class="avatar"> spagyther:</div>
<blockquote>
<p>what are you missing?</p>
</blockquote>
</aside>
<p>To give a direct answer, here’s what I want:</p>
<p>A database which is distributed, replicates data, scales horizontally across cores, is highly available, is range sharded, reshards data automatically, is highly available, has extremely strong consistency guarantees (strict serializability) across the entire keyspace, and runs on the BEAM with a simple native API.</p>
<p>From there, I want APIs which can stream updates to particular keys or ranges of keys with perfect consistency (always in-order, never missing updates).</p>
<p>And then on top of that, I want a relational layer with good Elixir integration and top-tier UX. I want strongly typed records (rows), relational queries, secondary indexes with perfect consistency (always up-to-date), and strongly typed schema migrations. I want to be able to perform live queries and receive updates to the result set as changes come in. I want all of this to scale horizontally.</p>
<p>I think this feature set would be enough to justify leaving Postgres. As far as I am aware there is nothing in the ecosystem that could even be used to build what I’ve described above, let alone provides the features I want.</p>
<p>Frankly we don’t even have anything that matches Postgres, a database which architecturally has not escaped the 20th century.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="356785" 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/what-are-the-remaining-gaps-in-the-elixir-ecosystem/69307/79">Post #78</a>
	                </div>
	            </div>
              <div id="likers-container-356785" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="356785"
                     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 #78"></div>
  </section>
</div>
    <div class="postbit" id="356786" data-post-id="356786">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="garrison" data-post="78" data-topic="69307">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>First of all, I just want to point out that this is not necessarily “my opinion” that I’m arguing here. This point is indisputable: Elixir developers are <em>not</em> using BEAM databases. We’re pretty much all using Ecto with relational databases, particularly Postgres/SQLite. I would imagine Postgres users outnumber Mnesia users by at least a few orders of magnitude <em>in this community</em>. When I said we lacked “proper” databases, the word “proper” was doing a lot of work there.</p>
</blockquote>
</aside>
<p>There are a few reasons why people don’t use mnesia, some of them:</p>
<ol>
<li>Peculiar way to do queries. This can be worked around and I think there are a few libraries that do that in elixir pretty well already. Nonetheless this can never be compared to having a proper DSL like SQL;</li>
<li>No external tooling. For me this is the most important factor when it comes to databases. Having the ability to open a CLI or GUI to query and inspect the database is critical. I’ve even worked on projects where we had analysts that were querying the database, as that was 100x times more productive than trying to build for them some custom web interfaces;</li>
<li>Migrations and backups. Databases like postgres offer a variety of tools for migrations and backups. If you were to use something like mnesia, you would have to implement all of this from scratch;</li>
</ol>
<aside class="quote no-group" data-username="garrison" data-post="78" data-topic="69307">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>This generation of distributed databases was born out of the early 2000s with BigTable and spread to DynamoDB, Cassandra, HBase, etc. The problem is that it’s now 2025, a full two decades later, and frankly these designs turned out to be a bit of an architectural dead end.</p>
</blockquote>
</aside>
<p>Distributed databases are a very niche field and it’s blown out of proportion on how useful they actually are. What I’ve seen in practice is that 95%+ of projects won’t need a distributed database, ever. There are also things like replicated read-only databases that postgres offers, this strikes a perfect balance for cases where you want distribution, but you don’t want to deal with the horrible experience of making all of that stuff 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="356786" 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/what-are-the-remaining-gaps-in-the-elixir-ecosystem/69307/80">Post #79</a>
	                </div>
	            </div>
              <div id="likers-container-356786" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="356786"
                     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 #79"></div>
  </section>
</div>
    <div class="postbit" id="356789" data-post-id="356789">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="garrison" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  garrison
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="D4no0" data-post="80" data-topic="69307">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/d4no0/48/33624_2.png" class="avatar"> D4no0:</div>
<blockquote>
<p>There are a few reasons why people don’t use mnesia, some of them:</p>
</blockquote>
</aside>
<p>I was trying to avoid roasting mnesia because I feel like we’re all aware of the drawbacks, but I was surprised to see you left out what I thought the two biggest problems were:</p>
<ol>
<li>Tables are limited to something like 2GB and then have to be partitioned, and once you partition them you lose all consistency guarantees, which is catastrophic. Also aren’t they stored in-memory?</li>
<li>In the event of a netsplit consistency guarantees are nonexistent, which is again catastrophic. From what I remember this is essentially unrecoverable?</li>
</ol>
<p>Of course the standard disclaimer applies here: the people who built Mnesia weren’t idiots or anything, it’s just that a) it was a really long time ago and b) they were designing for specialized telcom hardware or whatever, not Phoenix webapps!</p>
<aside class="quote no-group" data-username="D4no0" data-post="80" data-topic="69307">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/d4no0/48/33624_2.png" class="avatar"> D4no0:</div>
<blockquote>
<p>Distributed databases are a very niche field and it’s blown out of proportion on how useful they actually are.</p>
</blockquote>
</aside>
<p>I understand why you feel this way, but I disagree very strongly with this viewpoint. Distributed databases are very useful first because they can substantially improve durability and availability, both of which have proven to be very difficult to glue onto existing architectures (see the pain and suffering wrought by Flyio’s HA postgres attempts, for example).</p>
<p>But second, they are useful because Moore’s law ended a while ago and compute has primarily increased in parallel (more cores). We have reached a point where even your phone is almost certainly a distributed system, and so distributed databases must necessarily be the default. The ancient 20th century RDBMS architecture (Postgres) is extremely wasteful on multi-core hardware and spends a ludicrous amount of time dealing with lock contention instead of useful work. I don’t think this is something I need to justify because this is the Elixir community and I think we natively understand the benefits of parallel processing here <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>
<aside class="quote no-group" data-username="D4no0" data-post="80" data-topic="69307">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/d4no0/48/33624_2.png" class="avatar"> D4no0:</div>
<blockquote>
<p>but you don’t want to deal with the horrible experience of making all of that stuff consistent</p>
</blockquote>
</aside>
<p>But that’s the funny thing, isn’t it. It’s like what Joe Armstrong always used to say about Erlang: all it takes is a few smart people to work out the “distributed” part, and then the rest of us benefit for free!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="356789" 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/what-are-the-remaining-gaps-in-the-elixir-ecosystem/69307/81">Post #80</a>
	                </div>
	            </div>
              <div id="likers-container-356789" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="356789"
                     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 #80"></div>
  </section>
</div>
    <div class="postbit" id="356793" data-post-id="356793">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="garrison" data-post="81" data-topic="69307">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>The ancient 20th century RDBMS architecture (Postgres) is extremely wasteful on multi-core hardware and spends a ludicrous amount of time dealing with lock contention instead of useful work.</p>
</blockquote>
</aside>
<p>No offense, but this is not an argument, more like a troll post I would see on linkedin.</p>
<p>Postgres excels at concurrent access to data, this is what it was built for in the first place. If you are in the search for the next hip technology, then I can understand that, but please don’t use the fact that postgres is mature as a argument to jump the ship. As any other tools, you as a professional need to assess where it fits and where it doesn’t.</p>
<aside class="quote no-group" data-username="garrison" data-post="81" data-topic="69307">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>I don’t think this is something I need to justify because this is the Elixir community and I think we natively understand the benefits of parallel processing here <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>
</blockquote>
</aside>
<p>Is it though, or it’s about easy to manage concurrency? I see a lot of people using concurrent and parallel interchangeably these days, however by definition concurrent code is not necessarily parallel.</p>
<aside class="quote no-group" data-username="garrison" data-post="81" data-topic="69307">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>But that’s the funny thing, isn’t it. It’s like what Joe Armstrong always used to say about Erlang: all it takes is a few smart people to work out the “distributed” part, and then the rest of us benefit for free!</p>
</blockquote>
</aside>
<p>Taking in consideration that distribution, redundancy and consistency is a much bigger and harder problem than concurrency, I am more than positive we are at least 20 years behind, or if we were to look at telecom industry, where these problems were prerequisites to make that industry work, maybe we wouldn’t have to reinvent the wheel everytime. I guess that is not fun because the industry is too old.</p>
<p>Look at the currently used programming languages and how bad they are at dealing with concurrency, transpose that technological gap to distribution and the answer is clear that we are not there yet.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="356793" 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/what-are-the-remaining-gaps-in-the-elixir-ecosystem/69307/82">Post #81</a>
	                </div>
	            </div>
              <div id="likers-container-356793" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="356793"
                     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 #81"></div>
  </section>
</div>
    <div class="postbit" id="356797" data-post-id="356797">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="garrison" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  garrison
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="D4no0" data-post="82" data-topic="69307">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/d4no0/48/33624_2.png" class="avatar"> D4no0:</div>
<blockquote>
<p>No offense, but this is not an argument, more like a troll post I would see on linkedin.</p>
</blockquote>
</aside>
<p>I am sorry to see you stoop to essentially insulting me instead of responding to what I wrote in earnest. Obviously I am well aware that Postgres is capable of concurrency, and indeed even parallelism!</p>
<aside class="quote no-group" data-username="D4no0" data-post="82" data-topic="69307">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/d4no0/48/33624_2.png" class="avatar"> D4no0:</div>
<blockquote>
<p>Postgres excels at concurrent access to data, this is what it was built for in the first place.</p>
</blockquote>
</aside>
<p>Perhaps you would enjoy reading <a href="https://www.vldb.org/conf/2007/papers/industrial/p1150-stonebraker.pdf" rel="noopener nofollow ugc">the first HStore paper</a>, from <em>2007</em>, and if you remain unconvinced then you could try googling the authors, particularly that “Michael Stonebraker” guy, who sure does seem to know a whole lot about databases!</p>
<p>Of course, a lot has changed since 2007: namely, computers have gone from having 2 cores to 20, SSDs ended up being way cheaper than RAM, and networks got <em>really fast</em>.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="356797" 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/what-are-the-remaining-gaps-in-the-elixir-ecosystem/69307/83">Post #82</a>
	                </div>
	            </div>
              <div id="likers-container-356797" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="356797"
                     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 #82"></div>
  </section>
</div>
    <div class="postbit" id="356798" data-post-id="356798">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="garrison" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  garrison
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="D4no0" data-post="82" data-topic="69307">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/d4no0/48/33624_2.png" class="avatar"> D4no0:</div>
<blockquote>
<p>Is it though, or it’s about easy to manage concurrency? I see a lot of people using concurrent and parallel interchangeably these days, however by definition concurrent code is not necessarily parallel.</p>
</blockquote>
</aside>
<p>I think you are at serious risk of overloading the term “concurrency” here, as it has a special meaning in the context of a database.</p>
<p>The “concurrency” vs “parallelism” dichotomy which I think you’re describing has to do with whether work is performed in parallel or split into pieces and worked on “piece by piece” on a single core. The BEAM is very good at both, as we all know.</p>
<p>Concurrency in the context of databases usually refers to concurrency control, which has to do with how the database manages multiple transactions accessing the same data while giving the <em>illusion</em> of serialized execution (“serializable isolation”).</p>
<p>These meanings are loosely related but not really the same concept.</p>
<p>But I did not mention concurrency (of either kind) in my post, at all, so I’m not sure I understand what you were getting at here.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="356798" 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/what-are-the-remaining-gaps-in-the-elixir-ecosystem/69307/84">Post #83</a>
	                </div>
	            </div>
              <div id="likers-container-356798" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="356798"
                     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 #83"></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/69307/load_more?page=9">Load more posts (10 remaining)</a>
</div></template></turbo-stream>