Do relációs adatbázisok idejű adatokat a kukába a történelem, savepearlharbor

Helló, a nevem Dmitry Karlovski és én ... antikonformist, vagyis olyan személy, aki nem rendelkezik a szokásaikat, és mindig készen áll, hogy megváltoztassa őket, ha arra van szükség. Például, mint sok fejlesztő, elkezdtem tanulmányozni a relációs adatbázisok. Bár relációs algebra és nagyon szép a maga egyszerűségében, azt folyamatosan jutott eszembe, hogy megpróbálja belegyömöszölni egy kör alakú egy négyzet alakú lyuk, és megfordult, valahogy nem hermetikusan 🙂

Nem, nem fogok mesélni MongoDB sőt mi rosszabb «SQL gyilkos„. Cikkek a téma «SQL vs NoSQL» összehasonlítva valóban relációs adatbázisok dokumentum és így teljes:

  • Népszerűség: Oracle, MongoDB, Redis, HBase, OrientDB.
  • Funkcionalitás: OrientDB, Oracle, MongoDB, HBase, Redis.
  • Sebesség: nagyon sok múlik a probléma, az adatok és a végrehajtó a kérelmet. Átnéztem egy csomó referenciaértékek mindenhol mindent másképpen.

Az erők több ezer fejlesztők összpontosított, hogy egy viszonylag egyszerű domain modell elhelyezve a lemezeket úgy, hogy gyors, rugalmas és nem túl nehéz. Kiderült rosszul. ORM keretek vannak írva hatalmas, dühös SQL lekérdezések létrehozása hatalmas indexek, és a kettős adatokat.

Ennyi cikkek az Habré egyedül írt a probléma, ami szinte kizárólag a RDBMS kísérletek upihnut minden sokféleségét a tárgykörben a téglalap alakú asztal modellek:

Minden döntés szűkülnek le a három alapvető közül:

Táblázat szomszédsági. A leszármazott tart egy hivatkozás a szülő. Ott nem tárolt eljárás leszármazottai (hogy megmentse a szükségességét, hogy adja meg a további számozás amelyen rendezni, amely lassítja a betétek és mintavétel). Rekurzív kérdése vagy denormalization szomszédsági táblázatokat.

Rekurzív lekérdezés részfa:

Kérdés részfáját szabványosított táblázat szomszédsági:

A materializált útját. A leszármazottja az üzletek számát az összes ősök (a megrendelt őrizni). A legrosszabb esetben a hierarchia változás frissíti az adatokat az összes csomópont. Ennek hiányában a megfelelő IPA DBMS, göndör igényel manipuláció a húrok, ami nem fogadható el minden esetben a sebesség. Ne engedje, hogy belépését egy gyermek néhány ősei.

Kérdés részfa segítségével ordpath:

Beágyazott időközönként. Minden csomópont tárolja a két szám, amely meghatározza annak pontos helyét a hierarchiában. A legrosszabb esetben a hierarchia változás frissíti az adatokat az összes csomópont. Ne engedje, hogy belépését egy gyermek néhány ősei. Viszonylag bonyolult algoritmusok nagyobb pontosságát.

Mint láthatjuk, minden típusú megoldásnak az a súlyos korlátozások őket ábrázolható modell és a hatékonyságát a különböző típusú lekérdezések. És tudod, hogy miért van ilyen nagy számú, részletes cikkek tárolására fák, például a grafikonon adatbázisban? Igen, mert van, elvileg nem kell ezeket a problémákat, valamint a fa - egy speciális esete a grafikonon. Tehát a kérdés: „hogyan annyira feltalál, és mentse az adatbázist hierarchia” a grafikon adatbázisokban nem érdemes.

Kérdés részfa a grafikonon:

Igen, a nem-relációs adatbázis-kezelő rendszer, annak ellenére, hogy a közös neve «NoSQL», szintén támogatja a Structured Query Language, bővülő saját operátorokkal 🙂

Sok SQL-profik itt általában azt mondják, azt mondják, a fák és a több oszlopot a témakörben szinte soha nem fordul elő. De a költségek egy kicsit, hogy ki a komfort zónában, mint azonnal látni, hogy minden tárgykörben valójában áll egy grafikon - egy sor egységek, amelyek között vannak a különböző kapcsolatok. Ha ezek a kapcsolatok 1-to-1, vagy legalább egy 1-to-many, és ugyanabban az időben csatlakozni heterogén természetű, ezek a modellek viszonylag könnyen esik a relációs modellben (ha nem veszi figyelembe a különböző típusú csatlakozik mankóval formájában indexek). De általában ez nem így van. Sok helyen lehet találkozni a sok-sok. Az RDBMS minden egyes ilyen kapcsolatokat kell kezdeni egy külön asztal és néhány indexek rá, és ez a szövődmény építészet, adatok duzzad, és lassítja velük.

Néhány, különösen a „fejlett” programozók hez minden típusú boltban modellek az adatbázisban. „Fontos” a relációs fák a grafikonon, és még kezdetleges a szótárakban. De az ilyen megközelítések képezik „bármilyen feladatot a műszer” csak adj egy fejfájás (és ennek következtében a hibák változó súlyosságú) az adatok konzisztenciájának különböző részein az alkalmazást.

Szoftverfejlesztés - egy nagyon dinamikus dolog. Ma, a mester kell egy szakma, és csak ad neki egy szövegmezőbe írja be azt. Holnap azért van szükség, hogy csak azt mutatják, a szakma, a kínált meg, és adsz neki a SELECT gombot a kívánt, miközben a szakma id mester modell (egy a többhöz). Holnapután lesz szükség, hogy tudta válasszon ki több munkahely egyszerre (sok-sok). Egy héttel később, akkor sürgősen kell végrehajtani már hierarchikus katalógus szakma. Egy relációs adatbázisban összetettsége minden következő hop jelentősen meghaladja az előzőt. A grafikonból - több időt töltenek a vita, mint a végrehajtás. Tehát az elején a projekt akkor van értelme, hogy a legrugalmasabb eszköz, amely lehetővé teszi, hogy ne veszítse el a fejlődés üteme a folyamat változó üzleti követelmények (vagy jobb megértését az add). Igen, a speciális eszközök bizonyos esetekben gyorsabb és ezekben az esetekben, ha szükség van rá. nem vesz részt az ilyen jellegű optimalizálás.

Gyakran az SQL okos fejlesztők bármilyen MongoDB, amelyek azt mondják, minden sarkon, és próbálja, hogy megpróbálja tovább a projekt, de foglalkozni vele, zavarba csavarja az ujját a halántékához. Tudatlan és maradnak MongoDB, egyeztették a hiánya ügyletek és kapcsolatok dokumentumok között, a kedvéért a mitikus sebesség és a lehetőséget, hogy ragaszkodni dokumentálhatják JSON.

Nézzük eloszlatni néhány gyakori tévhiteket NoSQL, amely megítélése szerint a leghírhedtebb képviselői - MongoDB és Redis:

1. Nem ellenőrzik a szerkezet a írandó adatokat a felhasználó. Ennek hiányában a rendszerek vannak pluses (akkor az adatok áthelyezésére a háttérben, akkor tárolja nemcsak a sorok primitívek), de hátrányai is vannak (kell, hogy gondosan figyelemmel kíséri, hogy ír az adatbázisba, nem hatékony az adatok tárolása). A OrientDB találtunk egy ésszerű kompromisszum: megadhatja a séma és a felsorolt ​​területeken vannak érvényesítésre összhangban ez a felvétel, és nem pazarolja helyet a mezőnevek, és nem szerepel az érvényesítés nem, de lesz egy kicsit több helyet. Fontos megjegyezni, hogy a séma változás nem változik maguk a dokumentumok - csak, hogy nem tudod megváltoztatni őket, amíg vezethet egy új formátum.

2. Nem felel meg a követelményeknek a ACID (atomicitás, következetesség, elszigeteltség, megbízhatóság). OrientDB ezek a követelmények teljesülnek. Sőt, ez a dobozból is partitsirovanie és a master-master replikációt úgy, hogy támogatást, beleértve elosztott tranzakciókat. Ezzel állíthatja be az egyensúlyt a következetesség és sebességet választ:
writeQuorum meghatározza a csomópontok száma, amelyek meg kell erősítenie a rekord, mielőtt az adatbázis visszatér a választ, a sikeres tranzakciót.
readQuorum meghatározza a csomópontok száma, amelyek meg kell erősítenie a relevanciáját az adatokat, mielőtt az adatokat vissza a kérésre válaszul.
Alapértelmezésben minden tranzakció szinkron (várt választ minden replikák), és az olvasás, illetve nincs visszaigazolást a jelentősége (mert nem kell ebben az esetben).
A figyelemre méltó jellemzője az átlátszó támogatás térkép-csökkentése: ha a webhely nem tartalmaz minden adatot, aztán egy kérést más csomópontok és egyesíti őket válaszokat. Az ügyfél együtt tud működni partitsirovannoy adatbázis egészével. Vannak még avtobalansirovschik, dobó dokumentumok klaszterek szerint a különböző stratégiák.

Összehasonlítani a megközelítések grafikon és a relációs adatbázis-kezelő rendszer, hozzunk létre egy egyszerű üzleti vállalkozás - az a személy:

Minden egyszerű és szinte ugyanaz. Most adjuk hozzá a „barátok” hozzáállás:

Hátrányai RDBMS már kezd kijönni - mi szükség további asztal és egy egyedi index rajta. Az index ennek egyrészt biztosítja, hogy nem lesz ismétlődő névjegyek, másrészt lehetővé teszi, hogy gyorsan megtalálja a barátok a felhasználói azonosítót.

Levezetjük alapvető információkat barátok a felhasználó:

Az RDBMS, nem tudjuk tartani a kapcsolatot az eredmény - csak az azonosítókat. Ezért egy okos design, hogy elmagyarázza, hogyan adatokat az egyik asztalnál kapcsolódik a többi. A grafikonon egyszerűen bontakozik referencia.

És most azt látjuk, barátok barátai:

Az RDBMS kérés bonyolult volt jelentős. A jó meg kell bonyolítja még erősebben az adatokat szint a barátok nem duplikált egymás szint.

Akkor továbbra is hosszú idő, de a lényeg, azt hiszem, már világos. Egy kicsit részletesebben a különbség a relációs megközelítés és egy grafikon kivehető bemutatása „Hogy Graph adatbázisok indult a Multi Model forradalom”.

Végül megjegyzem, hogy a relációs adatbázisok, adatok tárolása asztal, de rendkívül hatékony minden lekérdezést, így adjuk a automatikusan generált fa - index. Sőt, az indexek próbálnak csinálni a burkolat, hogy van, nem igényel kezelést saját táblázat adatait. Tehát, ha kivágjuk az asztalra, és hagyja, hogy az index fa van ciklus, megkapjuk nem más, mint egy adatbázis grafikon, ahol az összes adatbázis - ez az egyik nagyobb, mint a maximális hatásos index.

Elég elmélet. A gyakorlatban tehát?

Tavaly voltam fejlesztése háttérrendszert SKEDDY projekt (keresés művészek és rögzítse őket a szolgáltatás). Úgy hangzik, mint nem nehéz, de ez a szám az üzleti szervezetek már egyenlő 20 (20 entitások asztal, ha használják RDBMS): személy, e-mail, telefon, társadalmi, token, alkalmazás, foglalkozás, szolgáltatás, ülés, értékelés, album, kép, értesítés, hely, vágány, fizetés, cikk, szempont, facet, szalon.

Köszönhetően grafikon adatmodell leképezése rá üzleti modell könnyű és egyszerű - írta egyszer egy egyszerű, általános kód szinkronizálni az adatbázis lehetővé tette a program szempontjából az üzleti szervezetek felesleges aggodalom optimalizálja az adatbázis lekérdezések. Valójában küzd AngularJS vette el sokkal több időt, de ez egy másik történet ...

Most a hátrányai:

A dokumentáció meglehetősen nem rossz az alapvető funkciókat, de néhány szempontból tükrözi nagyon rosszul. Például információt hukah kell gyűjteni a morzsákat.

Mi több, akkor semmi nem jön szóba 🙂

PS: tudom zahantit Szentpétervárott SKEDDY soha nem vette le 🙂

Csak a regisztrált felhasználók vehetnek részt a felmérésben. Jöjjön be. kérem.