sql >> Databasteknik >  >> RDS >> Mysql

Använda en NoSQL-databas över MySQL

Den artiga tolkningen av "NoSQL" har blivit Not Only SQL . Om du har data som verkligen är relationella, eller om din funktionalitet beror på saker som joins och ACIDity, bör du lagra dessa data på ett relationellt sätt. I det här inlägget kommer jag att förklara hur jag använder MySQL tillsammans med två NoSQL-datalager. Modern datalagring i webbskala handlar om att förstå hur man väljer de bästa verktygen för jobbet/jobben.

Som sagt, NoSQL är verkligen en reaktion på att den relationella metoden och sättet att tänka har tillämpats på problem där det faktiskt inte passar särskilt bra (typiskt enorma tabeller med tiotals miljoner rader eller mer). När tabellerna väl blir så stora har den typiska SQL "bästa praxis" varit att manuellt skära data -- det vill säga att sätta posterna 1 till 10 000 000 i tabell A, 10 000 001 till 20 000 001 i tabell B, och så vidare. Sedan, vanligtvis i applikationsmodelllagret, utförs uppslagningarna enligt detta schema. Det här är vad som kallas application-aware skalning. Det är tidskrävande och felbenäget, men för att skala upp något och samtidigt behålla MySQL för långbordsbutiken har det blivit en mer eller mindre standard MO. NoSQL representerar, för mig, den application-unaware alternativ.

Nyckel-värde

När jag fick en MySQL-prototyp att börja bli för stor för sitt eget bästa flyttade jag personligen så mycket data som möjligt till den blixtsnabba membase , som överträffar Memcached och ger uthållighet. Membase är ett distribuerat nyckel-värdelager som skalas mer eller mindre linjärt (Zynga använder det för att hantera en halv miljon operationer per sekund, till exempel) genom att lägga till fler råvaruservrar i ett kluster -- det är därför bra em> passar molnåldern Amazon EC2 , Joyent , etc.

Det är välkänt att distribuerade nyckelvärdebutiker är det bästa sättet att få enorm, linjär skala. Svagheten med nyckel-värde är frågebarhet och indexering. Men även i relationsvärlden är den bästa praxisen för skalbarhet att lägga så mycket ansträngning på applikationsservrarna som möjligt, göra anslutningar i minnet på varuappservrar istället för att be det centrala RDB-klustret att hantera all den logiken. Eftersom simple select plus application logic är verkligen det bästa sättet att uppnå massiv skala även på MySQL, övergången till något som Membase (eller dess konkurrenter som Riak ) är egentligen inte så illa.

Dokumentbutiker

Ibland – även om jag skulle hävda mer sällan än många tror – kräver en applikations design i sig sekundära index, frågebarhet i intervall, etc. NoSQL-metoden för detta är genom ett document store gillar MongoDB . Liksom Membase är Mongo mycket bra i vissa områden där relationsdatabaser är särskilt svaga, som application-unaware skalning, auto-sharding , och maintaining flat response times even as dataset size balloons . Det är betydligt långsammare än Membase och lite knepigare att göra ren horisontell skala, men fördelen är att det är mycket frågetecken. Du kan fråga efter parametrar och intervall i realtid, eller så kan du använda Map/Reduce för att utföra komplexa batchoperationer på verkligt enorma datamängder.

I samma projekt som jag nämnde ovan, som använder Membase för att servera massor av live spelardata, använder vi MongoDB för att lagra analytics/metrics-data, vilket verkligen är där MongoDB lyser.

Varför ska man behålla saker i SQL

Jag berörde kort det faktum att "verkligt relationell" information bör finnas i relationsdatabaser. Som kommentatorn Dan K. påpekar missade jag delen där jag diskuterade nackdelarna med att lämna RDBMS, eller åtminstone att lämna det helt.

För det första finns SQL i sig. SQL är välkänt och har varit en industristandard under lång tid. Vissa "NoSQL"-databaser som Googles App Engine Datastore (byggd på Big Table) implementerar sitt eget SQL-liknande språk (Googles kallas, sött, GQL för Google Query Language ). MongoDB tar ett nytt förhållningssätt till frågeproblemet med sina förtjusande JSON-frågeobjekt . Ändå är SQL i sig ett kraftfullt verktyg för att få ut information ur data, vilket ofta är hela poängen med databaser till att börja med.

Den viktigaste anledningen till att stanna kvar med RDBMS är ACID , eller Atomicity, Consistency, Isolation, Durability . Jag kommer inte att omhasha tillståndet för Acid-NoSQL, eftersom det är väl adresserat i det här inlägget på SO. Det räcker med att säga att det finns en rationell anledning till Oracles RDBMS har en så enorm marknad som inte är på väg någonstans:vissa data behöver ren ACID-kompatibilitet . Om din data gör det (och om den gör det, är du förmodligen väl medveten om det), så gör din databas det också. Behåll den pH låg!

Redigera: Kolla in Aaronaughts inlägg här. Han representerar business-to-business-perspektivet mycket bättre än jag kunde, delvis för att jag har tillbringat hela min karriär inom konsumentområdet.



  1. Hur man löser ORA-06512 på radnummer

  2. MySQL C# asynkmetoder fungerar inte?

  3. Får MySQL-syntaxfel efter att ha skickat formuläret

  4. Vad kan orsaka intermittenta ORA-12519 (TNS:ingen lämplig hanterare hittades) fel