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


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="jaybe78" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jaybe78/120/36069_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  jaybe78
                    <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>Don’t take it personal dude. <img src="https://forum.elixirforum.com/images/emoji/apple/smiley.png?v=15" title=":smiley:" class="emoji" alt=":smiley:" loading="lazy" width="20" height="20"></p>
<p>I haven’t said what you say is wrong.<br>
I’m just asking questions. <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>
<p>Concerning Redis I thought about using it.<br>
I use AWS, so I could use it but it’s really expensive.</p>
<p>I could deploy my own redis, but at this point I don’t feel like managing my own redis.<br>
It would be extra work.</p>
<p>But yeah thanks for your inputs <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="367214" 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/implementing-distributed-user-counters/71270/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-367214" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="367214"
                     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="367215" data-post-id="367215">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="LostKobrakai" data-post="9" data-topic="71270">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/lostkobrakai/48/3072_2.png" class="avatar"> LostKobrakai:</div>
<blockquote>
<p>The big change here is not GenServer vs. Redis though. It’s centralized storage of data (CP) vs. distributed storage of data (eventual consistency / AP)</p>
</blockquote>
</aside>
<p>I never said Redis vs Genservers though. I said ETS/Genservers, meaning the combination of ETS as a tracker/counter and Genservers as a method of passing the counts to wherever they need to go.</p>
<p>Redis does the job of both combined, just not as fast for local applications.</p>
<p>Also, do you know of any sites that track hundreds of thousands of users constantly joining/leaving rooms that don’t use an eventually consistent model?</p>
<p>Most sites will use a redis style tracker with a TTL heatbeat to display presence.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="367215" 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/implementing-distributed-user-counters/71270/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-367215" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="367215"
                     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="367253" data-post-id="367253">
  <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>I’m a little confused with what’s going on in this thread. There’s an implication here that Redis is somehow different than using ETS tables, but there is no reason you can’t just put an ETS table on one node and use it <em>exactly</em> like you would use Redis! You would have no fault tolerance and higher latency, just like Redis. The only reason you would want to <em>actually</em> use Redis is if you wanted its vast array of fancy data structures, which in this case maybe you don’t, seeing as you have <em>already</em> implemented your system on ETS.</p>
<aside class="quote no-group" data-username="Phxie" data-post="7" data-topic="71270">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/p/ecccb3/48.png" class="avatar"> Phxie:</div>
<blockquote>
<p>If you want to use ETS that’s fine, I was just pointing out that Redis is designed to handle what you’re trying to do in a way that ETS and Genservers are not. Your trying to add cross node functionality to tools that are for local use, rather than use a tool that will work cross node by default.</p>
</blockquote>
</aside>
<p>Again, it’s perfectly valid to use Redis for its functionality, but “ETS and GenServers” were <em>absolutely</em> designed to be used “cross-node”. OTP literally could not be <em>more</em> designed for that! It’s, like, the entire thing!</p>
<aside class="quote no-group" data-username="Phxie" data-post="13" data-topic="71270">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/p/ecccb3/48.png" class="avatar"> Phxie:</div>
<blockquote>
<p>Also, do you know of any sites that track hundreds of thousands of users constantly joining/leaving rooms that don’t use an eventually consistent model?</p>
</blockquote>
</aside>
<p>This is not a <em>literal</em> answer, but the quintessential example would be something like an exchange/order-matching system: something which processes (financial) transactions. If you want to learn more about that the magic keywords are “LMAX architecture”, plus check out Tigerbeetle for a modern fault-tolerant rendition.</p>
<aside class="quote no-group" data-username="LostKobrakai" data-post="9" data-topic="71270">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/lostkobrakai/48/3072_2.png" class="avatar"> LostKobrakai:</div>
<blockquote>
<p>The big change here is not GenServer vs. Redis though. It’s centralized storage of data (CP) vs. distributed storage of data (eventual consistency / AP)</p>
</blockquote>
</aside>
<p>Apologies in advance for nitpicking something you’re probably fully aware of, but CAP and “centralized/distributed” are separate concepts. You can have a distributed consistent system, and you can also have a single-threaded inconsistent system, though this is less common because in a single-threaded system consistency is so easy to achieve.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="367253" 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/implementing-distributed-user-counters/71270/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-367253" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="367253"
                     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="367262" data-post-id="367262">
  <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>To the OP, I think you need to take a step back here.</p>
<p>What are the rooms for? What do they contain? Messages? State? Where is that information stored?</p>
<p>Do you need fault tolerance, or are the rooms ephemeral?</p>
<p>Assuming it’s not a big deal to “lose” a room, it’s okay to store each room’s state in one place, without worrying about replication or distributed consistency. Even just the user count is a piece of state.</p>
<p>Do you need to scale out? If not, you can just put all of the rooms in one ETS table on one node. Or in Postgres, or Redis, or whatever. That will probably scale into the millions.</p>
<p>If you <em>do</em> need to scale out, hash partition the rooms across nodes. When a user connects, choose a random node and ask that node to add the user to one of its rooms. The node knows the state of each room on that node, so it can pick one at random. Then if you need to look up any other state about that room, you can hash it and contact its node. If you need to handle nodes going down, use consistent hashing. <a href="https://randorithms.com/2020/12/26/rendezvous-hashing.html" rel="noopener nofollow ugc">Rendezvous is simpler</a> than ring hashing.</p>
<p>When you pick a room to fill, finding the emptiest room is an expensive operation (there could be millions of rooms). Use the old load balancing trick: <a href="https://brooker.co.za/blog/2012/01/17/two-random.html" rel="noopener nofollow ugc">pick two at random</a> and fill the emptier one. It’s near-optimal.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="367262" 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/implementing-distributed-user-counters/71270/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-367262" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="367262"
                     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="367276" data-post-id="367276">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I’m confused as to why you’re confused because I’ve explained my thoughts on the differences between ETS and Redis multiple times.</p>
<p>More importantly, this was not meant to be the ETS vs Redis debate it became.</p>
<p>OP posted an issue and said:</p>
<aside class="quote no-group" data-username="jaybe78" data-post="1" data-topic="71270">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jaybe78/48/36069_2.png" class="avatar"> jaybe78:</div>
<blockquote>
<p>At this point, I\m running out of ideas</p>
</blockquote>
</aside>
<p>So I suggested a new idea that I know can work for the problem they are having. I don’t get why everyone on this site feels the need to turn simple comments aimed at just offering an alternative insight into bizaare 1up quote competitions.</p>
<aside class="quote no-group" data-username="garrison" data-post="14" data-topic="71270">
<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 only reason you would want to <em>actually</em> use Redis is if you wanted its vast array of fancy data structures, which in this case maybe you don’t, seeing as you have <em>already</em> implemented your system on ETS.</p>
</blockquote>
</aside>
<p><em>actually</em></p>
<p>Your making out that I’m suggesting Redis just because of “fancy” data structures and that OP didn’t make a post stating <strong>their current system does not work the way they want it to.</strong> People are allowed to offer alternative solutions they think will solve the issue.</p>
<aside class="quote no-group" data-username="garrison" data-post="14" data-topic="71270">
<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 is not a <em>literal</em> answer, but the quintessential example would be something like an exchange/order-matching system: something which processes (financial) transactions. If you want to learn more about that the magic keywords are “LMAX architecture”, plus check out Tigerbeetle for a modern fault-tolerant rendition.</p>
</blockquote>
</aside>
<p>Whats the point in answering the question with something that has <strong>nothing</strong> to do with tracking user presence or the question being asked. The topic is real time presence tracking, not general transactions at scale.</p>
<p>Presence involves users constantly joining/leaving and moving to different channels which involves updating users, rooms and counts constantly. I had this same problem with you in another thread where you just kept taking things off on random tangents.</p>
<p>I’m done with this whole forum I think. I just wanted to share a potential solution to the issue in the post.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="367276" 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/implementing-distributed-user-counters/71270/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-367276" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="367276"
                     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="367291" data-post-id="367291">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="jaybe78" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jaybe78/120/36069_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  jaybe78
                    <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>I’m actually here to hear different opinions… no one is holding the absolute truth on anything…</p>
<p>Stop taking things personally.<br>
He has the right to disagree with you.</p>
<p>Sorry you feel that way.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="367291" 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/implementing-distributed-user-counters/71270/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-367291" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="367291"
                     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="367294" data-post-id="367294">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Hi, maybe distributed cachex is an option to check:</p><aside class="onebox allowlistedgeneric" data-onebox-src="https://cachex.hexdocs.pm/distributed-caches.html">
  <header class="source">

      <a href="https://cachex.hexdocs.pm/distributed-caches.html" target="_blank" rel="noopener nofollow ugc">cachex.hexdocs.pm</a>
  </header>

  <article class="onebox-body">
    

<h3><a href="https://cachex.hexdocs.pm/distributed-caches.html" target="_blank" rel="noopener nofollow ugc">Distributed Caches — Cachex v4.1.1</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="367294" 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/implementing-distributed-user-counters/71270/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-367294" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="367294"
                     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="367304" data-post-id="367304">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="jaybe78" data-post="17" data-topic="71270" 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/jaybe78/48/36069_2.png" class="avatar"> jaybe78:</div>
<blockquote>
<p>I’m actually here to hear different opinions… no one is holding the absolute truth on anything…</p>
<p>Stop taking things personally.<br>
He has the right to disagree with you.</p>
<p>Sorry you feel that way.</p>
</blockquote>
</aside>
<p>You say no one is holding the absolute truth, but thats my critisism of the way he always responds to people.</p>
<p>The other day he was arguing with me because he has his own personal “correct” opinion of what the term “infinitescroll” means, that is different from the commonly understood term which resulted in a pointless discussion. He constantly argues with things you have never said, takes what you have said and either adds meaning to it, or tries to find meaning you never tried to exress and generally just nitpicks random things that are not relevant to the topic being discussed, or helpful in solving it.</p>
<p>Everyone has the right to disagree, but I have the right to get annoyed when people respond to me like this. The goal of a thread like this is to solve the main issue in the main post, not nitpick every little nuanced thing someone says or try to 1up people constantly.</p>
<p>I mean, what is the point of this? It has no relevance to anything being discussed in the thread at all but gets directed at me. What if people in the future come along looking for help solving the posts issue, then end up wasting time researching the things in his response?</p>
<aside class="quote no-group quote-modified" data-username="garrison" data-post="14" data-topic="71270">
<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>
<aside class="quote no-group" data-username="Phxie" data-post="13" data-topic="71270">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/p/ecccb3/48.png" class="avatar"> Phxie:</div>
<blockquote>
<p>Also, do you know of any sites that track hundreds of thousands of users constantly joining/leaving rooms that don’t use an eventually consistent model?</p>
</blockquote>
</aside>
<p>This is not a <em>literal</em> answer, but the quintessential example would be something like an exchange/order-matching system: something which processes (financial) transactions. If you want to learn more about that the magic keywords are “LMAX architecture”, plus check out Tigerbeetle for a modern fault-tolerant rendition.</p>
</blockquote>
</aside> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="367304" 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/implementing-distributed-user-counters/71270/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-367304" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="367304"
                     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="367306" data-post-id="367306">
  <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="Phxie" data-post="19" data-topic="71270">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/p/ecccb3/48.png" class="avatar"> Phxie:</div>
<blockquote>
<p>I mean, what is the point of this? It has no relevance to anything being discussed in the thread at all but gets directed at me.</p>
</blockquote>
</aside>
<p>I was simply trying to answer your question in earnest. Order matching is an example of a similar situation (orders join and leave the book) where strong consistency is required and the system effectively cannot be partitioned. If I had posted that question as you had I would have been interested in that response, so I gave it. If you were not interested, that’s perfectly fine; you could have simply ignored it!</p>
<aside class="quote no-group" data-username="Phxie" data-post="19" data-topic="71270">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/p/ecccb3/48.png" class="avatar"> Phxie:</div>
<blockquote>
<p>The other day he was arguing with me because he has his own personal “correct” opinion of what the term “infinitescroll” means, that is different from the commonly understood term which resulted in a pointless discussion. He constantly argues with things you have never said, takes what you have said and either adds meaning to it, or tries to find meaning you never tried to exress and generally just nitpicks random things that are not relevant to the topic being discussed, or helpful in solving it.</p>
</blockquote>
</aside>
<p>Personal attacks aside (which I do not appreciate, regardless of who they’re aimed at), you are literally confusing me with someone else. <em><a href="https://forum.elixirforum.com/t/liveview-inifinitescroll-misses-events-during-event-storms/71003/29" rel="nofollow">That was not me.</a></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="367306" 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/implementing-distributed-user-counters/71270/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-367306" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="367306"
                     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="367310" data-post-id="367310">
  <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="Phxie" data-post="16" data-topic="71270">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/p/ecccb3/48.png" class="avatar"> Phxie:</div>
<blockquote>
<p>Your making out that I’m suggesting Redis just because of “fancy” data structures and that OP didn’t make a post stating <strong>their current system does not work the way they want it to.</strong> People are allowed to offer alternative solutions they think will solve the issue.</p>
</blockquote>
</aside>
<p>Also I just want to reiterate for the third time that I think Redis is a perfectly valid solution and I take no issue, at all, with you recommending it. If you read my reply to the OP carefully you will note I also included it amongst my recommendations <em>before</em> attempting to build a distributed system <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>
<p>What I took issue with was this:</p>
<aside class="quote no-group" data-username="Phxie" data-post="7" data-topic="71270">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/p/ecccb3/48.png" class="avatar"> Phxie:</div>
<blockquote>
<p>Your trying to add cross node functionality to tools that are for local use, rather than use a tool that will work cross node by default.</p>
</blockquote>
</aside>
<p><strong>This is false.</strong> And I was not even the first person to point this out, it was <a class="mention" href="/u/lostkobrakai" rel="nofollow">@LostKobrakai</a> - I was mostly just clarifying the point he made, since his reply was quite terse.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="367310" 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/implementing-distributed-user-counters/71270/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-367310" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="367310"
                     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/71270/load_more?page=3">Load more posts (6 remaining)</a>
</div></template></turbo-stream>