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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Dirty schedulers is fine, or just send the work to another thread in rust and have elixir poll for the result or for it to send a message back instead of a function call.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="135584" 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/elixir-language-performance-tuning-for-1-quadrillion-records-per-month/23815/22">Post #21</a>
	                </div>
	            </div>
              <div id="likers-container-135584" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="135584"
                     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 #21"></div>
  </section>
</div>
    <div class="postbit" id="135586" data-post-id="135586">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Also, it doesn’t need to be a NIF, it’s operating over files after all, so a Port to a persistent process that does the work or even just a standalone application run via <code>System.cmd</code> on-demand or so would be fine.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="135586" 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/elixir-language-performance-tuning-for-1-quadrillion-records-per-month/23815/23">Post #22</a>
	                </div>
	            </div>
              <div id="likers-container-135586" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="135586"
                     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 #22"></div>
  </section>
</div>
    <div class="postbit" id="135606" data-post-id="135606">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="frumos" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  frumos
                    <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>Hello and thank you to everybody for extensive review and feedback. I see many suggestions. Let please digest your feedback and incorporate already given improvements (IO lists, tuples, etc) and I’ll be back shortly with results.</p>
<p>Also answering some questions.</p>
<blockquote>
<p><a class="mention" href="/u/jola" rel="nofollow">@jola</a> I think it’s worth talking about expectations here, do you expect the code to run as fast as Java?</p>
</blockquote>
<p>I do not expect Elixir in single ‘flow’ execution to over-perform Java, I only would like to get all possible improvements to make it as close as possible to lets say “base line”. The result what I have is already big win because it is just one flow of file processing but I need to process 400 files with overall latency 15-20 minutes, so as a next steps I need to scaleUp and most likely scaleOut this solution. And that is where Java fades away, especially on scaling out and orchestration of “workers”. That’s why I intentionally pursue Elixir.  There will be more functionality I need to implement after aggregation as well.</p>
<blockquote>
<p>@ <a href="https://forum.elixirforum.com/u/dimitarvp" rel="nofollow">dimitarvp</a> Do you know in advance how much maximum unique values will this combo have?</p>
</blockquote>
<p>The hourly input to this job in ~0.5 billion records in ~400 files. Because I remove few fields from the key hence getting more coarse-grained key, there is room for aggregation and reduction ratio is ~3.5-4 so as result from the 0.5 billion records we should have 120-150 millions</p>
<p>Also just overall comment about input file structure. It is fixed and unlikely to be changes any time in future. It just has header what I need to skip and the line separated records in CSV format. The key spec is fixed so I need just to pick up subset of keys out of the key set for aggregation.</p>
<p>Thank you.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="135606" 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/elixir-language-performance-tuning-for-1-quadrillion-records-per-month/23815/24">Post #23</a>
	                </div>
	            </div>
              <div id="likers-container-135606" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="135606"
                     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 #23"></div>
  </section>
</div>
    <div class="postbit" id="135609" data-post-id="135609">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="alvises" data-post="20" data-topic="23815" 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/alvises/48/2247_2.png" class="avatar"> alvises:</div>
<blockquote>
<p>Tell me if I’m wrong: with Rust NIFs (and NIFs in general) while the Rust code is executed the BEAM scheduler is completely locked right? So the Rust code should return as fast as possible?</p>
</blockquote>
</aside>
<p>Yes, needs to return in 1ms is good advice. But to be clear, it’s only scheduler on one core that’s locked–it’s not like it blocks all other processes from working, unless/until you hold onto the core so long that scheduling falls over and can’t get up.</p>
<p>So you can use a port instead. Or at the 1 ms mark return intermediate state, then wrap the nif into an Elixir module that takes care of calling, holding the state, passing into the next call, repeat until done.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="135609" 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/elixir-language-performance-tuning-for-1-quadrillion-records-per-month/23815/25">Post #24</a>
	                </div>
	            </div>
              <div id="likers-container-135609" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="135609"
                     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 #24"></div>
  </section>
</div>
    <div class="postbit" id="135614" data-post-id="135614">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<pre data-code-wrap="elixir"><code class="lang-elixir"> Stream.into(File.stream!(output_path, [:write, :utf8]))
</code></pre>
<p>This line likely isn’t helping - by default, it’s going to do a syscall to write the data for each element in the stream. The Java implementation uses BufferedWriter, which defaults to an 8kB buffer.</p>
<p>The <code>delayed_write</code> mode could help here:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">  Stream.into(File.stream!(output_path, [:write, :utf8, {:delayed_write, 8129, 1000}]))
</code></pre>
<p>(you can spell it just <code>:delayed_write</code>, but this version explicitly sets the buffer size to match the Java version)</p>
<p>See also the Erlang documentation for <a href="http://erlang.org/doc/man/file.html#open-2" rel="nofollow"><code>:file.open/2</code></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="135614" 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/elixir-language-performance-tuning-for-1-quadrillion-records-per-month/23815/26">Post #25</a>
	                </div>
	            </div>
              <div id="likers-container-135614" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="135614"
                     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 #25"></div>
  </section>
</div>
    <div class="postbit" id="135619" data-post-id="135619">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="frumos" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  frumos
                    <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>Thank you valuable feedback - will incorporate it as well.</p>
<p>Update:<br>
It was actually pretty fast fix getting ~50% of boost. The latency decreased from 115 sec to 80 sec using buffered writer! Thanks.</p>
<p>The next step IO list instead of strings for the key and Elixir solution will be near perfect</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="135619" data-batch-url="/posts/batch_likers">
                        6
                      </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/elixir-language-performance-tuning-for-1-quadrillion-records-per-month/23815/27">Post #26</a>
	                </div>
	            </div>
              <div id="likers-container-135619" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="135619"
                     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 #26"></div>
  </section>
</div>
    <div class="postbit" id="135633" data-post-id="135633">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group quote-modified" data-username="frumos" data-post="7" data-topic="23815">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/f/e495f1/48.png" class="avatar"> frumos:</div>
<blockquote>
<p>|&gt; Stream.map(&amp;parse_granular(&amp;1))<br>
|&gt; Enum.each(fn record → update(table, record) end)</p>
</blockquote>
</aside>
<p>That should probably be <code>Stream.each</code>, would reduce memory use a bit.</p>
<p>If you’re switching to iolists then this last part doesn’t make sense to stream any more</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">  |&gt; Stream.map(fn {key, value} -&gt; key &lt;&gt; "," &lt;&gt; Decimal.to_string(value) &lt;&gt; "\n" end)
  |&gt; Stream.into(File.stream!(output_path, [:write, :utf8]))
  |&gt; Stream.run()
</code></pre>
<p>I would change it to something like</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">  data = table
  |&gt; :ets.tab2list()
  |&gt; Enum.map(fn {key, value} -&gt; [key, ",", Decimal.to_string(value), "\n"] end)

  File.write!(output_path, data, [:utf8]))
</code></pre>
<p>Because you no longer create intermediate values that can be cleaned up, and there’s no repeated iterations, there’s no longer a value to <code>Stream</code> here, just overhead.</p>
<p>Nice job with the speedups! If you want to keep digging I’d expect the initial <code>File.stream</code> is a bottleneck, because it’s a lot slower to create a stream of lines than eg reading the whole binary and splitting it (but it uses a lot more memory).</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="135633" 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/elixir-language-performance-tuning-for-1-quadrillion-records-per-month/23815/28">Post #27</a>
	                </div>
	            </div>
              <div id="likers-container-135633" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="135633"
                     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 #27"></div>
  </section>
</div>
    <div class="postbit" id="135635" data-post-id="135635">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thanks <a class="mention" href="/u/overminddl1" rel="nofollow">@OvermindDL1</a>, <a class="mention" href="/u/kokolegorille" rel="nofollow">@kokolegorille</a>, <a class="mention" href="/u/sribe" rel="nofollow">@sribe</a> for the advices! <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"> and sorry guys I’ve moved the thread to something slightly different.<br>
About memory, for example Elixir Stream gets the lines from the file and these strings are passed to this NIF, do you know how these strings are passed? Is this memory shared in some way with the NIF code or is it copied?</p>
<p>I’m trying to understand how much a function call to a NIF can be fast…</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="135635" 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/elixir-language-performance-tuning-for-1-quadrillion-records-per-month/23815/29">Post #28</a>
	                </div>
	            </div>
              <div id="likers-container-135635" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="135635"
                     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 #28"></div>
  </section>
</div>
    <div class="postbit" id="135636" data-post-id="135636">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="frumos" data-post="24" data-topic="23815">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/f/e495f1/48.png" class="avatar"> frumos:</div>
<blockquote>
<p>And that is where Java fades away, especially on scaling out and orchestration of “workers”.</p>
</blockquote>
</aside>
<p>I’m sorry, I’m a huge Elixir fan but its hard to let this one go by. Java is really good at distributed batch processing. Like, really good at it. Elixir has advantages in real-time and concurrent systems, but for distributed batch processing I’m skeptical you will beat the performance OR the management capability of the Hadoop ecosystem and specifically Spark or MapReduce. And you don’t have to manage that yourself you can spin up an EMR cluster on AWS. A lot of this stuff gets oversold for fake “bigdata” projects but a quadrillion rows a month…thats a big ask for Elixir IMO.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="135636" 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/elixir-language-performance-tuning-for-1-quadrillion-records-per-month/23815/30">Post #29</a>
	                </div>
	            </div>
              <div id="likers-container-135636" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="135636"
                     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 #29"></div>
  </section>
</div>
    <div class="postbit" id="135640" data-post-id="135640">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="frumos" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  frumos
                    <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>Let me tend to disagree please.<br>
We do heavily use all spectrum of AWS services including EMR and the result what I am going to process is actually an EMR output. But not all distributed computation is required heavy artillery, infrastructure and external services. Many required task can be done in much more elegant and concise way.</p>
<p><a href="https://twitter.com/kevlinhenney/status/742280432847183874" class="onebox" target="_blank" rel="noopener nofollow ugc">https://twitter.com/kevlinhenney/status/742280432847183874</a></p>
<p>I did some of them in Java and rejected EMR solution when designed, and they still are running in Prod for 2-3 years with almost no operation. But all my Java solutions are based on scale up principle so far. It works good (as long as next gen of EC2 instances come) but what if i need a cluster of 2 or 3 nodes only? Just distribute set of tasks to the tiny fleet, then in Java it becomes not a trivial task at all. How to orchestrate this work how to retry failed tasks, how lock tasks, how to partition and shard task to particular node? All this requires bring extra services like DDB (for task locking, deduping and orchestration), Kinesis for sharding and locality and SQS as a message bus. I am looking at Actor model in Elixir and Erlang’s OTP which potentially gives all this options out of box and built into language.<br>
For Java I think I can only compare Akka to Elixir to achieve similar capabilities for horizontal scaling.<br>
Do I have wrong expectation?</p>
<p>Thanks.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="135640" 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/elixir-language-performance-tuning-for-1-quadrillion-records-per-month/23815/31">Post #30</a>
	                </div>
	            </div>
              <div id="likers-container-135640" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="135640"
                     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 #30"></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/23815/load_more?page=4">Load more posts (8 remaining)</a>
</div></template></turbo-stream>