sql >> Database >  >> RDS >> Mysql

MySQL-cluster (NDB) versus MySQL-replicatie (InnoDB) voor Rails 3-apps:voor- en nadelen?

Er is een goede vergelijking van InnoDB en MySQL Cluster (ndb) die onlangs in de documenten zijn gepost...het bekijken waard:http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-compared.html

De Cluster-architectuur bestaat uit een pool van MySQL-servers waartoe de applicatie(s) toegang hebben; deze MySQL-servers slaan de Clustergegevens niet echt op, de gegevens worden verdeeld over de onderstaande pool van gegevensknooppunten. Elke MySQL-server heeft toegang tot de gegevens in alle gegevensknooppunten. Als een MySQL-server een stuk gegevens wijzigt, is dit direct zichtbaar voor alle andere MySQL-servers.

Het is duidelijk dat deze architectuur het uiterst eenvoudig maakt om de database uit te schalen. In tegenstelling tot sharding hoeft de applicatie niet te weten waar de gegevens worden bewaard - het kan gewoon de load balanceren over alle beschikbare MySQL-servers. In tegenstelling tot uitschalen met MySQL-replicatie, kunt u met Cluster schrijven net zo goed schalen als lezen. Nieuwe gegevensknooppunten of MySQL-servers kunnen worden toegevoegd aan een bestaand cluster zonder verlies van service aan de applicatie.

De gedeelde-niets-architectuur van MySQL Cluster betekent dat het een extreem hoge beschikbaarheid kan leveren (99,999%+). Elke keer dat u gegevens wijzigt, worden deze synchroon gerepliceerd naar een tweede gegevensknooppunt; als één dataknooppunt uitvalt, worden de lees- en schrijfverzoeken van de applicaties automatisch afgehandeld door het back-updataknooppunt.

Vanwege de gedistribueerde aard van MySQL-cluster kunnen sommige bewerkingen langzamer zijn (bijvoorbeeld JOIN's die duizenden tussentijdse resultaten hebben - hoewel er een prototypeoplossing beschikbaar is die dit aanpakt), maar andere kunnen erg snel zijn en extreem goed schalen (bijv. sleutel leest en schrijft). U hebt de mogelijkheid om tabellen (of zelfs kolommen) in het geheugen of op schijf op te slaan en door de geheugenoptie te kiezen (met wijzigingen in het controlepunt naar schijf in de achtergrond) kunnen transacties zeer zijn snel.

MySQL-cluster kan ingewikkelder zijn om in te stellen dan een enkele MySQL-server, maar het kan voorkomen dat u sharding of lees-/schrijfsplitsing in uw toepassing moet implementeren. Schommels en rotondes.

Om de beste prestaties en schaalbaarheid uit MySQL-cluster te halen, moet u mogelijk uw toepassing aanpassen (zie whitepaper over afstemming van clusterprestaties:http://www.mysql.com/why-mysql/white-papers/mysql_wp_cluster_perfomance.php ). Als u de eigenaar bent van de applicatie, is dit normaal gesproken geen probleem, maar als u de applicatie van iemand anders gebruikt die u niet kunt wijzigen, kan dit een probleem zijn.

Een laatste opmerking is dat het niet alles of niets hoeft te zijn - je kunt ervoor kiezen om sommige van je tabellen in Cluster op te slaan en sommige met behulp van andere opslag-engines, dit is een optie per tafel. U kunt ook repliceren tussen Cluster en andere storage-engines (gebruik Cluster bijvoorbeeld voor uw runtime-database en repliceer vervolgens naar InnoDB om complexe rapporten te genereren).




  1. Leg gedrag uit bij het in kaart brengen van automatisch geïncrementeerde samengestelde id-reeksen met Hibernate

  2. Maak een "in plaats van" trigger in SQL Server

  3. count(*) en count(column_name), wat is het verschil?

  4. Een inventarisdatabase maken op Access