<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:og="http://ogp.me/ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:schema="http://schema.org/" xmlns:sioc="http://rdfs.org/sioc/ns#" xmlns:sioct="http://rdfs.org/sioc/types#" xmlns:skos="http://www.w3.org/2004/02/skos/core#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" version="2.0" xml:base="https://ddd23.drupalcamp.at/">
  <channel>
    <title>Scalability</title>
    <link>https://ddd23.drupalcamp.at/</link>
    <description/>
    <language>en</language>
    
    <item>
  <title>Why we moved the database drivers to their own modules</title>
  <link>https://ddd23.drupalcamp.at/why-we-moved-database-drivers-their-own-modules</link>
  <description>
&lt;span&gt;Why we moved the database drivers to their own modules&lt;/span&gt;

  &lt;div class="field field--name-field-r field--type-entity-reference field--label-inline clearfix"&gt;
    &lt;div class="field__label"&gt;Room&lt;/div&gt;
              &lt;div class="field__item"&gt;&lt;a href="https://ddd23.drupalcamp.at/session-room/hs13-2nd-floor" hreflang="en"&gt;HS13 (2nd floor)&lt;/a&gt;&lt;/div&gt;
          &lt;/div&gt;

&lt;span&gt;&lt;a title="View user profile." href="https://ddd23.drupalcamp.at/user/daffie" lang about="https://ddd23.drupalcamp.at/user/daffie" typeof="schema:Person" property="schema:name" datatype&gt;daffie&lt;/a&gt;&lt;/span&gt;

&lt;span&gt;&lt;time datetime="2023-04-22T11:51:10+02:00" title="Saturday, April 22, 2023 - 11:51"&gt;Sat, 04/22/2023 - 11:51&lt;/time&gt;
&lt;/span&gt;

  &lt;div class="field field--name-field-time-slot field--type-entity-reference field--label-inline clearfix"&gt;
    &lt;div class="field__label"&gt;Time Slot&lt;/div&gt;
              &lt;div class="field__item"&gt;&lt;a href="https://ddd23.drupalcamp.at/session-time-slot/fri-1145am-1215pm-72123" hreflang="en"&gt;Fri 11:45am to 12:15pm (7/21/23)&lt;/a&gt;&lt;/div&gt;
          &lt;/div&gt;

  &lt;div class="field field--name-field-session-length field--type-list-integer field--label-inline clearfix"&gt;
    &lt;div class="field__label"&gt;Session length&lt;/div&gt;
              &lt;div class="field__item"&gt;Short session - 25min, including Q&amp;amp;A&lt;/div&gt;
          &lt;/div&gt;

  &lt;div class="field field--name-field-audience field--type-entity-reference field--label-inline clearfix"&gt;
    &lt;div class="field__label"&gt;Audience&lt;/div&gt;
              &lt;div class="field__item"&gt;Intermediate&lt;/div&gt;
          &lt;/div&gt;

  &lt;div class="field field--name-field-session-category field--type-entity-reference field--label-inline clearfix"&gt;
    &lt;div class="field__label"&gt;Session Category&lt;/div&gt;
              &lt;div class="field__item"&gt;Innovation &amp;amp; The future&lt;/div&gt;
          &lt;/div&gt;

            &lt;div class="text-content clearfix field field--name-body field--type-text-with-summary field--label-hidden field__item"&gt;&lt;p&gt;In Drupal 9.4 the database drivers for MySQL, MariaDB, PostgreSQL and SQLite were moved to their own modules. This session is about why we did that and what we want to do next.&lt;/p&gt;&lt;p&gt;We had a number of problems with the old situation:&lt;/p&gt;&lt;p&gt;1. Having contributed modules with a database driver copy their driver files to the directory drupal_root/drivers is not very composer friendly.&lt;br&gt;&lt;br&gt;2. The database driver classes are unfortunately not enough to make Drupal work for a specific database. All database drivers need to override things like (views and other) plugins and entity storage classes. Those overrides need to live in a module&lt;/p&gt;&lt;p&gt;3. Tests are not always the same for every database driver. Those overrides also need to live in a module.&lt;br&gt;&lt;br&gt;4. The by Drupal core supported database drivers are the example for contributed database drivers. Just like the Drupal core module and themes are the example for the contributed module and themes.&lt;br&gt;&lt;br&gt;5. Database drivers should be able to extend another database driver. Just like modules can do.&lt;br&gt;&lt;br&gt;Having the by Drupal core supported database drivers in their own modules makes it possible to do:&lt;/p&gt;&lt;p&gt;A. Create a new database driver for MySQL that allows queries to be run asynchronously. For instance with multiple blocks on a page, the block data can be loaded in parallel from the database instead of synchronously. PHP 8.1 has added the Fibers functionality and that allows I/O and database queries to run asynchronously. The database driver for MySQLi allows Drupal to use asynchronous queries.&lt;/p&gt;&lt;p&gt;B. Store content entity data in a document format. Content entity data is now stored in multiple tables and with a high number of entities, getting entity data out of the database will become slow. When used in combination with authenticated users and a lot of content, will result in Drupal becoming slow. Storing content entity data in a document format will make it fast again. The only database that a the moment has enough functionality to make it work with Drupal is MongoDB.&lt;br&gt;Using caching is great, but has it limitations. If we make hard Drupal calls a lot faster, we can use Drupal without any caching or with a lot less. PHP is fast enough for this. Databases are fast too. Only storing data following the relational database rules makes will result in complicated queries for getting the data out of the database. Complicated queries with large amounts of data will result in a performance nightmare. That is why we are using so much caching with Drupal sites. For anonymous users this is not a problem, only with authenticated users is caching a lot of times not possible. The solution is to store content entity data in a document format. In that way we almost always can get the data out of the database with a simple query (and therefor a fast query). When all queries are simple queries, the resulting Drupal page call will be fast.&lt;/p&gt;&lt;p&gt;I have already build a database driver for MongoDB. The driver is in the form of a Drupal module and the project can be found here: https://gitlab.com/daffie/mongodb867. It is based on Drupal 8.6.7 it hacks Drupal core with a &amp;gt;1.5 MB patch file. This is totally not maintainable. To fix that problem I have started to work on Drupal core to make the MongoDB database driver module work without patching/hacking Drupal core.&lt;/p&gt;&lt;p&gt;I would like to end with a group discussion about what we want to do next. What does the group think. Do they have other/new ideas. Hopefully get other people involved in what is next. This can also happen after the official session.&lt;/p&gt;&lt;/div&gt;
      
  &lt;div class="field field--name-field-speakers field--type-entity-reference field--label-above"&gt;
    &lt;div class="field__label"&gt;Speaker(s)&lt;/div&gt;
          &lt;div class="field__items"&gt;
              &lt;div class="field__item"&gt;&lt;div typeof="schema:Person" about="https://ddd23.drupalcamp.at/user/daffie"&gt;
  
  &lt;h4&gt;David Bekker&lt;/h4&gt;
      &lt;div class="user__position"&gt;Drupal developer at Finalist&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
              &lt;/div&gt;
      &lt;/div&gt;

  &lt;div class="text-content clearfix field field--name-field-speaker-biography field--type-text-long field--label-above"&gt;
    &lt;div class="field__label"&gt;Speaker biography&lt;/div&gt;
              &lt;div class="field__item"&gt;&lt;p&gt;&lt;strong&gt;David Bekker&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;I am the main contributor in having the database drivers moved to their own modules, I am also the subsystem maintainer for the Database API and I have over 500 Drupal core commit credits.&lt;/p&gt;&lt;/div&gt;
          &lt;/div&gt;

  &lt;div class="field field--name-field-session-keywords field--type-entity-reference field--label-inline clearfix"&gt;
    &lt;div class="field__label"&gt;Session Keywords&lt;/div&gt;
          &lt;div class="field__items"&gt;
              &lt;div class="field__item"&gt;&lt;a href="https://ddd23.drupalcamp.at/taxonomy/term/27" hreflang="en"&gt;Back End Development&lt;/a&gt;&lt;/div&gt;
          &lt;div class="field__item"&gt;&lt;a href="https://ddd23.drupalcamp.at/taxonomy/term/31" hreflang="en"&gt;Performance&lt;/a&gt;&lt;/div&gt;
          &lt;div class="field__item"&gt;&lt;a href="https://ddd23.drupalcamp.at/taxonomy/term/32" hreflang="en"&gt;Scalability&lt;/a&gt;&lt;/div&gt;
          &lt;div class="field__item"&gt;&lt;a href="https://ddd23.drupalcamp.at/taxonomy/term/53" hreflang="en"&gt;Drupal future&lt;/a&gt;&lt;/div&gt;
          &lt;div class="field__item"&gt;&lt;a href="https://ddd23.drupalcamp.at/taxonomy/term/54" hreflang="en"&gt;Innovation&lt;/a&gt;&lt;/div&gt;
          &lt;div class="field__item"&gt;&lt;a href="https://ddd23.drupalcamp.at/taxonomy/term/52" hreflang="en"&gt;Core Conversations&lt;/a&gt;&lt;/div&gt;
              &lt;/div&gt;
      &lt;/div&gt;
</description>
  <pubDate>Sat, 22 Apr 2023 09:51:10 +0000</pubDate>
    <dc:creator>daffie</dc:creator>
    <guid isPermaLink="false">53 at https://ddd23.drupalcamp.at</guid>
    </item>
<item>
  <title>How to write maintainable large scale software</title>
  <link>https://ddd23.drupalcamp.at/how-write-maintainable-large-scale-software</link>
  <description>
&lt;span&gt;How to write maintainable large scale software&lt;/span&gt;

  &lt;div class="field field--name-field-r field--type-entity-reference field--label-inline clearfix"&gt;
    &lt;div class="field__label"&gt;Room&lt;/div&gt;
              &lt;div class="field__item"&gt;&lt;a href="https://ddd23.drupalcamp.at/session-room/hs1-ground-level" hreflang="en"&gt;HS1 (Ground level)&lt;/a&gt;&lt;/div&gt;
          &lt;/div&gt;

&lt;span&gt;&lt;a title="View user profile." href="https://ddd23.drupalcamp.at/user/kristiaanvandeneynde" lang about="https://ddd23.drupalcamp.at/user/kristiaanvandeneynde" typeof="schema:Person" property="schema:name" datatype&gt;kristiaanvandeneynde&lt;/a&gt;&lt;/span&gt;

&lt;span&gt;&lt;time datetime="2023-03-24T10:38:28+01:00" title="Friday, March 24, 2023 - 10:38"&gt;Fri, 03/24/2023 - 10:38&lt;/time&gt;
&lt;/span&gt;

  &lt;div class="field field--name-field-time-slot field--type-entity-reference field--label-inline clearfix"&gt;
    &lt;div class="field__label"&gt;Time Slot&lt;/div&gt;
              &lt;div class="field__item"&gt;&lt;a href="https://ddd23.drupalcamp.at/session-time-slot/wed-200pm-245pm-71923" hreflang="en"&gt;Wed 2:00pm to 2:45pm (7/19/23)&lt;/a&gt;&lt;/div&gt;
          &lt;/div&gt;

  &lt;div class="field field--name-field-session-length field--type-list-integer field--label-inline clearfix"&gt;
    &lt;div class="field__label"&gt;Session length&lt;/div&gt;
              &lt;div class="field__item"&gt;Long session - 45min, including Q&amp;amp;A&lt;/div&gt;
          &lt;/div&gt;

  &lt;div class="field field--name-field-audience field--type-entity-reference field--label-inline clearfix"&gt;
    &lt;div class="field__label"&gt;Audience&lt;/div&gt;
              &lt;div class="field__item"&gt;Intermediate&lt;/div&gt;
          &lt;/div&gt;

  &lt;div class="field field--name-field-session-category field--type-entity-reference field--label-inline clearfix"&gt;
    &lt;div class="field__label"&gt;Session Category&lt;/div&gt;
              &lt;div class="field__item"&gt;Backend Development&lt;/div&gt;
          &lt;/div&gt;

            &lt;div class="text-content clearfix field field--name-body field--type-text-with-summary field--label-hidden field__item"&gt;&lt;p&gt;Over the years of writing the Group module I have come to many occasions where I regretted writing some code that was now making my life miserable. I've tried to learn from these mistakes and managed to take away a few important lessons.&lt;/p&gt;&lt;p&gt;In this session, it would be my pleasure to teach some of these lessons I've had to learn the hard way. Topics that I'll cover include writing single responsibility code, abstracting out systems that can serve different purposes and taking plenty of time to properly architect your code.&lt;/p&gt;&lt;p&gt;We'll also go into some of my most painful mistakes to date and how I fixed them.&lt;/p&gt;&lt;/div&gt;
      
  &lt;div class="field field--name-field-speakers field--type-entity-reference field--label-above"&gt;
    &lt;div class="field__label"&gt;Speaker(s)&lt;/div&gt;
          &lt;div class="field__items"&gt;
              &lt;div class="field__item"&gt;&lt;div typeof="schema:Person" about="https://ddd23.drupalcamp.at/user/kristiaanvandeneynde"&gt;
  
            &lt;div class="field field--name-user-picture field--type-image field--label-hidden field__item"&gt;  &lt;a href="https://ddd23.drupalcamp.at/user/kristiaanvandeneynde" hreflang="en"&gt;&lt;img loading="lazy" src="https://ddd23.drupalcamp.at/sites/default/files/styles/medium/public/pictures/2023-03/KristiaanVandenEynde.jpg?h=b4e301e9&amp;amp;itok=fuMk16po" width="220" height="220" alt="Profile picture for user kristiaanvandeneynde" typeof="foaf:Image"&gt;

&lt;/a&gt;
&lt;/div&gt;
      
  &lt;h4&gt;Kristiaan Van den Eynde&lt;/h4&gt;
      &lt;div class="user__position"&gt;Senior Drupal developer at Factorial GmbH&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
              &lt;/div&gt;
      &lt;/div&gt;

  &lt;div class="text-content clearfix field field--name-field-speaker-biography field--type-text-long field--label-above"&gt;
    &lt;div class="field__label"&gt;Speaker biography&lt;/div&gt;
              &lt;div class="field__item"&gt;&lt;p&gt;&lt;strong&gt;Kristiaan Van den Eynde&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Author and maintainer of the Group module. Have been working with Drupal for well over a decade and have presented at various Drupal Cons, Camps and Dev Days.&lt;/p&gt;&lt;/div&gt;
          &lt;/div&gt;

  &lt;div class="field field--name-field-session-keywords field--type-entity-reference field--label-inline clearfix"&gt;
    &lt;div class="field__label"&gt;Session Keywords&lt;/div&gt;
          &lt;div class="field__items"&gt;
              &lt;div class="field__item"&gt;&lt;a href="https://ddd23.drupalcamp.at/taxonomy/term/32" hreflang="en"&gt;Scalability&lt;/a&gt;&lt;/div&gt;
          &lt;div class="field__item"&gt;&lt;a href="https://ddd23.drupalcamp.at/taxonomy/term/27" hreflang="en"&gt;Back End Development&lt;/a&gt;&lt;/div&gt;
          &lt;div class="field__item"&gt;&lt;a href="https://ddd23.drupalcamp.at/taxonomy/term/29" hreflang="en"&gt;Symfony&lt;/a&gt;&lt;/div&gt;
          &lt;div class="field__item"&gt;&lt;a href="https://ddd23.drupalcamp.at/taxonomy/term/31" hreflang="en"&gt;Performance&lt;/a&gt;&lt;/div&gt;
              &lt;/div&gt;
      &lt;/div&gt;
</description>
  <pubDate>Fri, 24 Mar 2023 09:38:28 +0000</pubDate>
    <dc:creator>kristiaanvandeneynde</dc:creator>
    <guid isPermaLink="false">31 at https://ddd23.drupalcamp.at</guid>
    </item>

  </channel>
</rss>
