{"id":36,"date":"2007-03-23T11:33:00","date_gmt":"2007-03-23T11:33:00","guid":{"rendered":"http:\/\/www.olivierdoucet.info\/wordpress\/?p=36"},"modified":"2007-03-23T11:33:00","modified_gmt":"2007-03-23T11:33:00","slug":"moteur-de-stockage-falcon-pour-mysql","status":"publish","type":"post","link":"https:\/\/www.olivierdoucet.info\/blog\/2007\/03\/23\/moteur-de-stockage-falcon-pour-mysql\/","title":{"rendered":"Moteur de stockage Falcon pour MySQL"},"content":{"rendered":"<p>Pour stocker vos tables, MySQL utilise ce qu&rsquo;on appelle un \u00ab\u00a0moteur de stockage\u00a0\u00bb. C&rsquo;est ce moteur qui est charg\u00e9 de d\u00e9finir comment vos donn\u00e9es vont \u00eatre stock\u00e9s sur le disque, en m\u00e9moire, et surtout comment MySQL va y acc\u00e9der (en lecture, mise \u00e0 jour ou suppression). Les plus connus sont MyISAM et InnoDB. Seul ce deuxi\u00e8me est \u00ab\u00a0transactionnel\u00a0\u00bb, c&rsquo;est \u00e0 dire qu&rsquo;il peut permettre d&rsquo;effectuer une s\u00e9rie de mises \u00e0 jour sur la base en m\u00eame temps, ou annuler dse modifications. Mais le but de mon billet n&rsquo;est pas d&rsquo;expliquer tout cela, mais d&rsquo;aller bien plus loin et de vous dire comment Falcon fonctionne globalement.<br \/>\n<!--more--><br \/>\n!!!! Pourquoi un nouveau moteur ? MySQL AB, la soci\u00e9t\u00e9 qui \u00e9dite le gestionnaire de base de donn\u00e9es homonyme, est en pleine expansion. La notori\u00e9t\u00e9 du logiciel est maintenant telle que la soci\u00e9t\u00e9 a pu d\u00e9velopp\u00e9 de nouveaux services et souhaite aller encore plus loin dans le monde des SGBD. Sa gratuit\u00e9 en est une grande force, sans remettre en cause sa stabilit\u00e9 et sa s\u00e9curit\u00e9 (depuis la version 5 seulement ! je ne me permettrais pas d&rsquo;\u00e9crire \u00ab\u00a0stabilit\u00e9\u00a0\u00bb et \u00ab\u00a0mysql 4\u00a0\u00bb dans la m\u00eame phrase). Quoi qu&rsquo;il en soit, MySQL repose sur des formats de stockage particuliers. De mani\u00e8re historique MyISAM mais qui malheureusement a maintenant montr\u00e9 ses limites en performance, notamment \u00e9criture. De plus, ce format n&rsquo;est pas transactionnel et n&rsquo;a aucun support des clefs \u00e9trang\u00e8re, ce qui est une \u00e9norme lacune face \u00e0 la concurrence, notamment le puissant Oracle. Le moteur InnoDB est lui transactionnel et a permis de combler ce foss\u00e9 de performance. Ce moteur est maintenant largement utilis\u00e9 et sa stabilit\u00e9 reconnu. Ce n&rsquo;est pas pour rien que Oracle a rachet\u00e9 InnoBase, la soci\u00e9t\u00e9 cr\u00e9atrice de InnoDB. C&rsquo;est suite \u00e0 ce rachat que MySQL AB a commenc\u00e9 \u00e0 se poser des questions : si son moteur phare est maintenant propri\u00e9t\u00e9 d&rsquo;un concurrent, comment assurer la survie du logiciel \u00e0 long terme ? M\u00eame si des accords ont \u00e9t\u00e9 sign\u00e9s entre MySQL AB et Oracle, il est devenu clair et indispensable \u00e0 MySQL AB de d\u00e9velopper son propre moteur en interne. C&rsquo;est ainsi que Falcon est n\u00e9, du moins sur le papier.%%% !!!!Buts de Falcon Les principaux objectifs de Falcon sont clairs : * Un moteur qui g\u00e8re le transactionnel avec toutes les sp\u00e9cifications qu&rsquo;on attend d&rsquo;un tel moteur (rollback, commit, cl\u00e9s \u00e9trang\u00e8res, etc.) * Un moteur qui sache s&rsquo;adapter \u00e0 la demande et au mat\u00e9riel sur lequel il tourne pour en tirer le meilleur (selon la m\u00e9moire, le nombre de CPU, etc.) * Et bien s\u00fbr, \u00eatre un moteur ind\u00e9pendant et propre \u00e0 MySQL AB pour ne pas d\u00e9pendre de technologies externes \u00e0 la soci\u00e9t\u00e9. .%%% !!!!Les points forts Que demande-t-on \u00e0 un moteur de stockage ? Cela tient en fait en deux crit\u00e8res : *  Stabilit\u00e9 : il est important que le moteur ne perde pas de donn\u00e9es, m\u00eame en cas de plantage ou autre. Dans le cas d&rsquo;un plantage soudain, le moteur doit permettre de retrouver l&rsquo;int\u00e9gralit\u00e9 des donn\u00e9es intactes moins les derni\u00e8res donn\u00e9es qui aient pu \u00eatre \u00e9crites avant le crash. * Performance : le moteur doit \u00eatre performant dans la majorit\u00e9 des cas, voir tout le temps. Falcon a \u00e9t\u00e9 d\u00e9velopp\u00e9 dans cette optique. .%%% !!!!Du cache de partout Pour pouvoir servir les donn\u00e9es rapidement, il est important de mettre en cache un maximum de donn\u00e9es, en se rappelant que plus il y a de donn\u00e9es en cache et plus il sera long de lire ce dernier. Le cache est donc avant tout la recherche du meilleur compromis possible (c&rsquo;est pareil pour les index \u00e0 un autre niveau !). Falcon impl\u00e9mente plusieurs niveaux de cache : * Un cache de ligne * Un cache de \u00ab\u00a0pages\u00a0\u00bb (un ensemble de lignes) * Un cache de log * Un cache syst\u00e8me (entre le logiciel et le mat\u00e9riel, principalement le disque dur) Note : Pour l&rsquo;instant, les perfs de Falcon sont tr\u00e8s en de\u00e7a des attentes. N&rsquo;oublions pas qu&rsquo;il s&rsquo;agit d&rsquo;une version alpha, et qu&rsquo;il faudra donc attendre des versions quasi d\u00e9finitives avant de juger. [Un benchmark InnoDB \/ MyISAM \/ Falcon|http:\/\/www.mysqlperformanceblog.com\/2007\/01\/08\/innodb-vs-myisam-vs-falcon-benchmarks-part-1\/|en] .%%% !!!!Gestion des tables et indexes Le moteur Falcon permet de stocker un nombre illimit\u00e9 de lignes. La version alpha actuelle posss\u00e8de juste une limite (provisoire donc) \u00e0 4 milliards de ligne ce qui devrait \u00eatre suffisant pour la majorit\u00e9 d&rsquo;entres vous. Il g\u00e8re \u00e9galement les index auto-incr\u00e9ment\u00e9s, m\u00eame si je rappelle que cette specification ne fait pas vraiment partie du standard (Oracle utilise par exemple des compteurs \u00e0 part). Comme tout bon moteur transactionnel, le support des cl\u00e9s \u00e9trang\u00e8res est \u00e9galement de la partie mais malheureusement pas encore disponible au moment o\u00f9 j&rsquo;\u00e9cris. Le stockage physique est diff\u00e9rent des autres moteurs, le comportement est donc diff\u00e9rent. Par exemple, le stockage n&rsquo;est pas fait selon la clef primaire. Ainsi, si vous faites un SELECT sans clause ORDER BY, les enregistrements ne seront pas forc\u00e9ment retourn\u00e9s par ordre ascendant de la clef primaire. Autre point, Falcon ne supporte pas le type FULLTEXT. C&rsquo;est la m\u00eame limitation que InnoDB. Il est dommage que ces moteurs transactionnels ne supportent pas cette caract\u00e9ristique, ou ne d\u00e9veloppe les m\u00eames fonctionnalit\u00e9s.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pour stocker vos tables, MySQL utilise ce qu&rsquo;on appelle un \u00ab\u00a0moteur de stockage\u00a0\u00bb. C&rsquo;est ce moteur qui est charg\u00e9 de d\u00e9finir comment vos donn\u00e9es vont \u00eatre stock\u00e9s sur le disque, en m\u00e9moire, et surtout comment MySQL va y acc\u00e9der (en lecture, mise \u00e0 jour ou suppression). Les plus connus sont MyISAM et InnoDB. Seul ce deuxi\u00e8me est \u00ab\u00a0transactionnel\u00a0\u00bb, c&rsquo;est \u00e0 dire qu&rsquo;il peut permettre d&rsquo;effectuer une s\u00e9rie de mises \u00e0 jour sur la base en m\u00eame temps, ou annuler dse modifications. Mais le but de mon billet n&rsquo;est pas d&rsquo;expliquer tout cela, mais d&rsquo;aller bien plus loin et de vous dire comment Falcon fonctionne globalement.<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[36],"class_list":["post-36","post","type-post","status-publish","format-standard","hentry","category-php-sql","tag-mysql"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Moteur de stockage Falcon pour MySQL - My thoughts<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.olivierdoucet.info\/blog\/2007\/03\/23\/moteur-de-stockage-falcon-pour-mysql\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Moteur de stockage Falcon pour MySQL - My thoughts\" \/>\n<meta property=\"og:description\" content=\"Pour stocker vos tables, MySQL utilise ce qu&#039;on appelle un &quot;moteur de stockage&quot;. C&#039;est ce moteur qui est charg\u00e9 de d\u00e9finir comment vos donn\u00e9es vont \u00eatre stock\u00e9s sur le disque, en m\u00e9moire, et surtout comment MySQL va y acc\u00e9der (en lecture, mise \u00e0 jour ou suppression). Les plus connus sont MyISAM et InnoDB. Seul ce deuxi\u00e8me est &quot;transactionnel&quot;, c&#039;est \u00e0 dire qu&#039;il peut permettre d&#039;effectuer une s\u00e9rie de mises \u00e0 jour sur la base en m\u00eame temps, ou annuler dse modifications. Mais le but de mon billet n&#039;est pas d&#039;expliquer tout cela, mais d&#039;aller bien plus loin et de vous dire comment Falcon fonctionne globalement.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.olivierdoucet.info\/blog\/2007\/03\/23\/moteur-de-stockage-falcon-pour-mysql\/\" \/>\n<meta property=\"og:site_name\" content=\"My thoughts\" \/>\n<meta property=\"article:published_time\" content=\"2007-03-23T11:33:00+00:00\" \/>\n<meta name=\"author\" content=\"olivier\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@odoucet\" \/>\n<meta name=\"twitter:site\" content=\"@odoucet\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"olivier\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/2007\/03\/23\/moteur-de-stockage-falcon-pour-mysql\/\",\"url\":\"https:\/\/www.olivierdoucet.info\/blog\/2007\/03\/23\/moteur-de-stockage-falcon-pour-mysql\/\",\"name\":\"Moteur de stockage Falcon pour MySQL - My thoughts\",\"isPartOf\":{\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/#website\"},\"datePublished\":\"2007-03-23T11:33:00+00:00\",\"author\":{\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/#\/schema\/person\/2a02230ae6aeac086b3379e5853c6f96\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/2007\/03\/23\/moteur-de-stockage-falcon-pour-mysql\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.olivierdoucet.info\/blog\/2007\/03\/23\/moteur-de-stockage-falcon-pour-mysql\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/2007\/03\/23\/moteur-de-stockage-falcon-pour-mysql\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.olivierdoucet.info\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Moteur de stockage Falcon pour MySQL\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/#website\",\"url\":\"https:\/\/www.olivierdoucet.info\/blog\/\",\"name\":\"My thoughts\",\"description\":\"En fran\u00e7ais and in english :)\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.olivierdoucet.info\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/#\/schema\/person\/2a02230ae6aeac086b3379e5853c6f96\",\"name\":\"olivier\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/febd16d726b2266a512e951d03424de3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/febd16d726b2266a512e951d03424de3?s=96&d=mm&r=g\",\"caption\":\"olivier\"},\"sameAs\":[\"http:\/\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Moteur de stockage Falcon pour MySQL - My thoughts","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.olivierdoucet.info\/blog\/2007\/03\/23\/moteur-de-stockage-falcon-pour-mysql\/","og_locale":"fr_FR","og_type":"article","og_title":"Moteur de stockage Falcon pour MySQL - My thoughts","og_description":"Pour stocker vos tables, MySQL utilise ce qu'on appelle un \"moteur de stockage\". C'est ce moteur qui est charg\u00e9 de d\u00e9finir comment vos donn\u00e9es vont \u00eatre stock\u00e9s sur le disque, en m\u00e9moire, et surtout comment MySQL va y acc\u00e9der (en lecture, mise \u00e0 jour ou suppression). Les plus connus sont MyISAM et InnoDB. Seul ce deuxi\u00e8me est \"transactionnel\", c'est \u00e0 dire qu'il peut permettre d'effectuer une s\u00e9rie de mises \u00e0 jour sur la base en m\u00eame temps, ou annuler dse modifications. Mais le but de mon billet n'est pas d'expliquer tout cela, mais d'aller bien plus loin et de vous dire comment Falcon fonctionne globalement.","og_url":"https:\/\/www.olivierdoucet.info\/blog\/2007\/03\/23\/moteur-de-stockage-falcon-pour-mysql\/","og_site_name":"My thoughts","article_published_time":"2007-03-23T11:33:00+00:00","author":"olivier","twitter_card":"summary_large_image","twitter_creator":"@odoucet","twitter_site":"@odoucet","twitter_misc":{"\u00c9crit par":"olivier","Dur\u00e9e de lecture estim\u00e9e":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.olivierdoucet.info\/blog\/2007\/03\/23\/moteur-de-stockage-falcon-pour-mysql\/","url":"https:\/\/www.olivierdoucet.info\/blog\/2007\/03\/23\/moteur-de-stockage-falcon-pour-mysql\/","name":"Moteur de stockage Falcon pour MySQL - My thoughts","isPartOf":{"@id":"https:\/\/www.olivierdoucet.info\/blog\/#website"},"datePublished":"2007-03-23T11:33:00+00:00","author":{"@id":"https:\/\/www.olivierdoucet.info\/blog\/#\/schema\/person\/2a02230ae6aeac086b3379e5853c6f96"},"breadcrumb":{"@id":"https:\/\/www.olivierdoucet.info\/blog\/2007\/03\/23\/moteur-de-stockage-falcon-pour-mysql\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.olivierdoucet.info\/blog\/2007\/03\/23\/moteur-de-stockage-falcon-pour-mysql\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.olivierdoucet.info\/blog\/2007\/03\/23\/moteur-de-stockage-falcon-pour-mysql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.olivierdoucet.info\/blog\/"},{"@type":"ListItem","position":2,"name":"Moteur de stockage Falcon pour MySQL"}]},{"@type":"WebSite","@id":"https:\/\/www.olivierdoucet.info\/blog\/#website","url":"https:\/\/www.olivierdoucet.info\/blog\/","name":"My thoughts","description":"En fran\u00e7ais and in english :)","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.olivierdoucet.info\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"https:\/\/www.olivierdoucet.info\/blog\/#\/schema\/person\/2a02230ae6aeac086b3379e5853c6f96","name":"olivier","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.olivierdoucet.info\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/febd16d726b2266a512e951d03424de3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/febd16d726b2266a512e951d03424de3?s=96&d=mm&r=g","caption":"olivier"},"sameAs":["http:\/\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/posts\/36","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/comments?post=36"}],"version-history":[{"count":0,"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/posts\/36\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/media?parent=36"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/categories?post=36"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/tags?post=36"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}