<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Nov 20, 2013 at 12:11 AM, Matthias Radestock <span dir="ltr">&lt;<a href="mailto:matthias@rabbitmq.com" target="_blank">matthias@rabbitmq.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="im">On 20/11/13 04:38, Graeme N wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Rabbit at the moment doesn&#39;t make much effort into making its<br>
workload append only and contiguous by default<br>
</blockquote>
<br></div>
Actually all disk writes in rabbit *are* append-only (plus the occasional truncate). But when dealing with multiple disk-bound queues, there is inevitably a fair bit of seeking going on. And SSDs are much quicker at that.<span class=""><font color="#888888"><br>
</font></span></blockquote><br><br></div><div class="gmail_quote">Well, I guess that multiple small files, even if they are individually written as append only, doesn&#39;t really qualify as an append-only workload in the sense I&#39;d normally think of it. The reason to use an append-only workload is to ensure it performs well on spinning disks by avoiding seeks. Looking at the files under /var/lib/rabbitmq/mnesia/rabbit@hostname/msg_store_persistent on our busiest host, and we see ~390 files, all &lt;= 17 MiB. Compare to MySQL or Riak, where we split the InnoDB or Bitcask append-only logs at 500 MiB, which is chosen so it fits inside of our hardware RAID controllers&#39; BBU caches.<br>
<br>Our big messages in RabbitMQ are 500kiB to 4MiB, so each of these 16 MiB chunks only stores ~10 of these messages, which is far smaller than our typical batch size of ~100 messages. Relatively speaking, this is a ton more overhead in many small files than we typically see in other datastores that bill themselves as spinning disk friendly / append only. When you consider that those other data stores use a single set of append-only logs for all queues/tables/buckets in the system, and rabbit seems to be segmenting them based on queue, it means that rabbit&#39;s workload contains at least an order of magnitude more seeks when busy than these other storage engines.<br>
<br></div><div class="gmail_quote">So, while rabbit&#39;s workload at the file chunk level may technically be append only, it doesn&#39;t actually seem to avoid seeks in its workload, and we tend to see pretty massive persistent queue performance improvements by using SSDs. Thus, I wouldn&#39;t really consider its workload in the same class as most append-only storage systems.<br>
<br></div><div class="gmail_quote">Graeme<br><br></div></div></div>