<?xml version="1.0" encoding="UTF-8"?>
<post>
  <id>01a0808a-09c5-7049-8b9c-534064378ec2</id>
  <type>post</type>
  <thread>
    <item>
      <id>01a0808a-09c5-7049-8b9c-534064378ec2</id>
      <depth>0</depth>
      <author>Stefan Wintermeyer</author>
      <url>https://vutuv.de/wintermeyer/posts/01a0808a-09c5-7049-8b9c-534064378ec2</url>
      <published_on>2026-09-08</published_on>
      <in_reply_to_id/>
      <body_markdown>AFAIK ist Mastodon im Kern eine Ruby on Rails Applikation. Das ORM wäre dann ActiveRecord. Eigentlich ist ActiveRecord nicht schlecht und generiert auch brauchbares SQL. Aber es kann natürlich nicht suboptimale Programmierung ausbügeln. Das hier ist kein Framework oder ORM Problem. Da hat jemand beim Programmieren nicht bis ans Ende gedacht. 

Schaue Dir mal die https://abuuba.com Benchmark Vergleichswerte an. Bei Mastodon gibt es noch viel Optimierungspotential.</body_markdown>
      <author_username>wintermeyer</author_username>
      <in_reply_to_author/>
    </item>
    <item>
      <id>01a080bd-85ce-7c62-b98f-523ae120ae7a</id>
      <depth>1</depth>
      <author>René Oelke</author>
      <url>https://vutuv.de/reneoelke/posts/01a080bd-85ce-7c62-b98f-523ae120ae7a</url>
      <published_on>2026-09-08</published_on>
      <in_reply_to_id>01a0808a-09c5-7049-8b9c-534064378ec2</in_reply_to_id>
      <body_markdown>@wintermeyer Eines der Optimierungspotentiale scheint wohl auch Storage und Caching zu sein. Ist das in abuuba anders oder sogar besser gelöst?</body_markdown>
      <author_username>reneoelke</author_username>
      <in_reply_to_author>Stefan Wintermeyer</in_reply_to_author>
    </item>
    <item>
      <id>01a080c2-6b1c-7e87-b58b-41b4d6dcfeb9</id>
      <depth>2</depth>
      <author>Stefan Wintermeyer</author>
      <url>https://vutuv.de/wintermeyer/posts/01a080c2-6b1c-7e87-b58b-41b4d6dcfeb9</url>
      <published_on>2026-09-08</published_on>
      <in_reply_to_id>01a080bd-85ce-7c62-b98f-523ae120ae7a</in_reply_to_id>
      <body_markdown>Ich bin ja ein großer Fan vom Caching. Aber Caching funktioniert nur richtig gut, wenn die Grundlagen dahinter sauber geplant und programmiert wurden.

Mastodon hat diesbezüglich Raum für Verbesserungen.

abuuba hat es aber auch einfacher. Es ist immer einfacher Fehler anderer zu sehen und diese dann nicht zu wiederholen, als selbst auch von Null anzufangen.</body_markdown>
      <author_username>wintermeyer</author_username>
      <in_reply_to_author>René Oelke</in_reply_to_author>
    </item>
    <item>
      <id>01a080ef-7746-7789-9bdc-c4d97a2dbc5d</id>
      <depth>1</depth>
      <author>Stefan Wintermeyer</author>
      <url>https://vutuv.de/wintermeyer/posts/01a080ef-7746-7789-9bdc-c4d97a2dbc5d</url>
      <published_on>2026-09-08</published_on>
      <in_reply_to_id>01a0808a-09c5-7049-8b9c-534064378ec2</in_reply_to_id>
      <body_markdown>Ja, das kenne ich aus meinem beruflichen Alltag auch nur zu gut. Es mangelt oft an den Grundlagen. Wenn dann noch eine &quot;Schicht&quot; Caching drüber gelegt wird, dann wundert sich jeder, warum bei jeder zweiten Abfrage falsche Ergebnisse rauskommen.</body_markdown>
      <author_username>wintermeyer</author_username>
      <in_reply_to_author>Stefan Wintermeyer</in_reply_to_author>
    </item>
  </thread>
  <description>AFAIK ist Mastodon im Kern eine Ruby on Rails Applikation. Das ORM wäre dann ActiveRecord. Eigentlich ist ActiveRecord nicht schlecht und generiert auch brauchbares SQL. Aber es kann natürlich nicht s</description>
  <title>Stefan Wintermeyer · 2026-09-08</title>
  <author>
    <name>Stefan Wintermeyer</name>
    <username>wintermeyer</username>
    <url>https://vutuv.de/wintermeyer</url>
  </author>
  <replies>
    <item>
      <author>René Oelke</author>
      <url>https://vutuv.de/reneoelke/posts/01a080bd-85ce-7c62-b98f-523ae120ae7a</url>
      <published_on>2026-09-08</published_on>
      <body_markdown>@wintermeyer Eines der Optimierungspotentiale scheint wohl auch Storage und Caching zu sein. Ist das in abuuba anders oder sogar besser gelöst?</body_markdown>
      <author_username>reneoelke</author_username>
    </item>
    <item>
      <author>Stefan Wintermeyer</author>
      <url>https://vutuv.de/wintermeyer/posts/01a080ef-7746-7789-9bdc-c4d97a2dbc5d</url>
      <published_on>2026-09-08</published_on>
      <body_markdown>Ja, das kenne ich aus meinem beruflichen Alltag auch nur zu gut. Es mangelt oft an den Grundlagen. Wenn dann noch eine &quot;Schicht&quot; Caching drüber gelegt wird, dann wundert sich jeder, warum bei jeder zweiten Abfrage falsche Ergebnisse rauskommen.</body_markdown>
      <author_username>wintermeyer</author_username>
    </item>
  </replies>
  <url>https://vutuv.de/wintermeyer/posts/01a0808a-09c5-7049-8b9c-534064378ec2</url>
  <formats>
    <json>https://vutuv.de/wintermeyer/posts/01a0808a-09c5-7049-8b9c-534064378ec2.json</json>
    <text>https://vutuv.de/wintermeyer/posts/01a0808a-09c5-7049-8b9c-534064378ec2.txt</text>
    <markdown>https://vutuv.de/wintermeyer/posts/01a0808a-09c5-7049-8b9c-534064378ec2.md</markdown>
    <xml>https://vutuv.de/wintermeyer/posts/01a0808a-09c5-7049-8b9c-534064378ec2.xml</xml>
  </formats>
  <video/>
  <tags>
    <item>performance</item>
    <item>sql</item>
    <item>Mastodon</item>
    <item>ActiveRecord</item>
    <item>Geschwindigkeit</item>
  </tags>
  <in_reply_to>
    <text>Werfe einen Blick in das PostgrSQL-Log. In dem werden auch long-running-Queries protokolliert. Und was sehe ich da? #Mastodon macht:

 SELECT &quot;tags&quot;.* FROM &quot;tags&quot; WHERE &quot;tags&quot;.&quot;id&quot; IN ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, […] $5272, $5273, $5274) AND &quot;tags&quot;.&quot;id&quot; &gt; $5275 ORDER BY &quot;tags&quot;.&quot;id&quot; ASC LIMIT $5276

Heiliger Bimbam, 5276 Bind-Parameter. Wer baut sowas … – sieht nach irgendeinem gammeligem ORM aus.
Ja, natürlich sind Bind-Parameter richtig und korrekt. Aber doch nicht über 5000! 

Die kommen doch garantiert auch aus der DB. SQL kann sowas wie:

 SELECT * FROM tags WHERE id IN (SELET tag_id FROM &lt;wasauchimmer&gt; WHERE &lt;bedingung&gt;) AND id &gt; $1 ORDER BY id ASC LIMIT $2;

Allerdings riecht &quot;id &gt; $x&quot; irgendwie auch nach einem schlechten Datenbank-Modell.</text>
    <author>@alvar@freude.social</author>
    <url>https://freude.social/users/alvar/statuses/117231286402674628</url>
    <content_warning/>
    <network>fediverse</network>
  </in_reply_to>
  <like_count>1</like_count>
  <generated_at>2026-09-08T14:18:51Z</generated_at>
  <schema_version>3</schema_version>
  <published_on>2026-09-08</published_on>
  <images/>
  <review/>
  <license/>
  <fediverse_reaction_count>0</fediverse_reaction_count>
  <reply_count>3</reply_count>
  <fediverse_replies>
    <item>
      <handle>@alvar@freude.social</handle>
      <text>@wintermeyer@vutuv.de ja, mastodon ist Ruby on Rails. Welches ORM verwendet wird weiß ich nicht. 

In Sachen SQL ist „siboptimale Programmierung“ leider Standard. Sehe ich sehr sehr häufig. Habe früher als Freiberufler u.a. PostgreSQL Performance-Tuning gemacht. Oft wurden noch nicht mal die Grundlagen beherrscht.</text>
      <author>Alvar Freude</author>
      <url>https://freude.social/@alvar/117235343788928300</url>
      <received_at>2026-09-08T12:09:42Z</received_at>
      <content_warning/>
      <network>freude.social</network>
    </item>
  </fediverse_replies>
  <body_markdown>AFAIK ist Mastodon im Kern eine Ruby on Rails Applikation. Das ORM wäre dann ActiveRecord. Eigentlich ist ActiveRecord nicht schlecht und generiert auch brauchbares SQL. Aber es kann natürlich nicht suboptimale Programmierung ausbügeln. Das hier ist kein Framework oder ORM Problem. Da hat jemand beim Programmieren nicht bis ans Ende gedacht. 

Schaue Dir mal die https://abuuba.com Benchmark Vergleichswerte an. Bei Mastodon gibt es noch viel Optimierungspotential.</body_markdown>
  <repost_count>0</repost_count>
  <bookmark_count>0</bookmark_count>
  <fediverse_reply_count>1</fediverse_reply_count>
  <likers>
    <item>
      <name>René Oelke</name>
      <username>reneoelke</username>
      <url>https://vutuv.de/reneoelke</url>
    </item>
  </likers>
  <fediverse_like_count>0</fediverse_like_count>
  <fediverse_reactions/>
  <fediverse_repost_count>0</fediverse_repost_count>
  <thread_truncated>false</thread_truncated>
  <verified_author_links/>
</post>
