Global ji bo hilanîna daneyan xezîne-şûr in. Darên. Beş 2

Global ji bo hilanîna daneyan xezîne-şûr in. Darên. Beş 2Destpêk - li beşa 1 binêre.

3. Guhertoyên avahiyan dema ku gerdûnan bikar tînin

Avahiyek wekî dara fermankirî xwedan rewşên taybetî yên cihêreng e. Werin em wan kesên ku nirxa wan ya pratîkî heye dema ku bi gerdûnan re dixebitin bifikirin.

3.1 Rewşa taybetî 1. Yek girêk bê şax


Global ji bo hilanîna daneyan xezîne-şûr in. Darên. Beş 2Gerdûnî ne tenê wekî rêzek, lê di heman demê de wekî guhêrbarên birêkûpêk jî têne bikar anîn. Mînakî, wekî jimarvan:

Set ^counter = 0  ; установка счётчика
Set id=$Increment(^counter) ;  атомарное инкрементирование

Di vê rewşê de gerdûnî, ji bilî wateya xwe, dikare şaxên xwe jî hebin. Yek ji yê din dernakeve.

3.2 Rewşa taybetî 2. Yek vertex û gelek şax

Bi gelemperî, ev bingehek bingehîn-nirxa klasîk e. Û heke em gelek nirxan wekî nirxek hilînin, em ê tabloyek pir asayî bi mifteyek bingehîn bistînin.

Global ji bo hilanîna daneyan xezîne-şûr in. Darên. Beş 2

Ji bo pêkanîna tabloyek li ser gerdûnan, divê em bi xwe rêzan ji nirxên stûnê biafirînin, û dûv re wan bi karanîna mifteya bingehîn li gerdûnê hilînin. Ji bo ku hûn dema xwendinê dîsa li stûnan dabeş bikin, hûn dikarin bikar bînin:

  1. karakterên veqetandinê.
    Set ^t(id1) = "col11/col21/col31"
    Set ^t(id2) = "col12/col22/col32"
  2. nexşeyek hişk a ku tê de her zevî hejmareke pêşwextkirî ya byte digire. Wekî ku di databasên pêwendiyê de tê kirin.
  3. fonksiyonek taybetî $LB (di Cache de heye), ku rêzek nirxan diafirîne.
    Set ^t(id1) = $LB("col11", "col21", "col31")
    Set ^t(id2) = $LB("col12", "col22", "col32")

Balkêş e, ne dijwar e ku meriv gerdûnan bikar bîne da ku di databasên pêwendiyê de tiştek mîna indexên duyemîn bikin. Werin em ji avahîyên weha re îndeksa gerdûnî bi nav bikin. Indeksa gerdûnî darek alîkar e ji bo lêgerîna bilez a zeviyên ku ne beşek ji mifteya bingehîn a gerdûna sereke ne. Ji bo dagirtina wê û karanîna wê, hûn hewce ne ku kodek din binivîsin.

Ka em li ser stûna yekem îndekek gerdûnî biafirînin.

Set ^i("col11", id1) = 1
Set ^i("col12", id2) = 1

Naha, ji bo ku bi lez li agahdariya di stûna yekem de bigerin, divê em li gerdûnî bigerin ^i û bişkojkên bingehîn (id) yên ku bi nirxa xwestî ya stûna yekem re têkildar in bibînin.

Dema ku nirxek têxin, em dikarin tavilê hem nirx û hem jî gerdûnîyên pêvek ji bo qadên pêwîst biafirînin. Û ji bo pêbaweriyê, bila em hemî di danûstendinê de bipêçin.

TSTART
Set ^t(id1) = $LB("col11", "col21", "col31")
Set ^i("col11", id1) = 1
TCOMMIT

Agahdariyên li ser ka meriv wê çawa li M tabloyên li ser globalan, emulasyona indexên duyemîn.

Ger fonksiyonên ji bo têxistina / nûvekirin / jêbirina rêzan di COS / M de bêne nivîsandin û berhev kirin, dê tabloyên weha bi qasî databasên kevneşopî zû bixebitin (an hêj zûtirîn).Min ev daxuyanî bi ceribandinên li ser INSERT û SELECT-ê li ser tabloyek du-stûnî kontrol kir, tevî karanîna fermanên TSTART û TCOMMIT (danûstandin).

Min senaryoyên tevlihevtir bi gihîştina hevdem û danûstendinên paralel ceribandiye.

Bêyî karanîna danûstendinan, rêjeya têketinê ji her mîlyon nirxan 778 insert / çirk bû.
Bi 300 mîlyon nirx - 422 inserts / çirk.

Dema ku danûstendinan bikar tînin - 572 têkel / çirk ji bo 082M têkel. Hemî operasyon ji koda M-ya berhevkirî hatine kirin.
Dîskên hişk bi rêkûpêk in, ne SSD. RAID5 bi Write-back. Pêvajoya Phenom II 1100T.

Ji bo ceribandina databasek SQL bi heman rengî, hûn hewce ne ku pêvajoyek hilanînek binivîsin ku dê di lûkê de têketinan pêk bîne. Dema ceribandina MySQL 5.5 (hilanînê InnoDB), bi karanîna vê rêbazê min hejmar di çirkeyê de ji 11K veqetandek bêtir werdigirt.
Erê, pêkanîna tabloyan li ser gerdûnan ji databasên pêwendiyê tevlihevtir xuya dike. Ji ber vê yekê, databasên pîşesaziyê yên li ser gerdûnan gihîştina SQL heye ku xebata bi daneyên tabloyê re hêsan bike.

Global ji bo hilanîna daneyan xezîne-şûr in. Darên. Beş 2Bi gelemperî, heke şemaya daneyê pir caran neyê guheztin, leza danasînê ne krîtîk e û tevahiya databasê bi hêsanî dikare di forma tabloyên normalîzekirî de were temsîl kirin, wê hingê ew hêsantir e ku bi SQL re bixebite, ji ber ku ew astek bilindtir a abstraction peyda dike. .

Global ji bo hilanîna daneyan xezîne-şûr in. Darên. Beş 2Di vê rewşa taybetî de min xwest ku nîşan bidim gerdûnî dikarin wekî avakerek ji bo afirandina databasên din tevbigerin. Mîna assemblerek ku bi zimanên din dikare were nivîsandin. Li vir mînakên ku hûn çawa dikarin li ser gerdûnan analogan biafirînin hene key-nirx, lîste, set, tablo, databasên belge-oriented.

Heke hûn hewce ne ku bi hewildanek hindiktirîn databasek ne-standard biafirînin, wê hingê divê hûn li gerdûnan bigerin.

3.3 Rewşa taybetî 3. Dara du-astî, her girêka asta duyemîn jimareyek şaxên sabît heye

Global ji bo hilanîna daneyan xezîne-şûr in. Darên. Beş 2Dibe ku we ew texmîn kir: ev pêkanînek alternatîf a tabloyên li ser gerdûnan e. Ka em vê pêkanînê bi ya berê re bidin ber hev.

Tabloyên li ser darek du-ast li hember. li ser darek yek-asta.

Минусы
Плюсы

  1. Ji bo têketinê hêdîtir e, ji ber ku hûn hewce ne ku hejmara girêkan bi hejmara stûnan re wekhev bikin.
  2. Zêdetir vexwarina cîhê dîskê. Ji ber ku navnîşên gerdûnî (wek navnîşên rêzê têne fêm kirin) bi navên stûnan cîhê dîskê digirin û ji bo her rêzê têne dubare kirin.

  1. Zûtir gihîştina nirxên stûnên kesane, ji ber ku ne hewce ye ku rêzê were pars kirin. Li gorî ceribandinên min, ew li ser 11,5 stûnan 2% zûtir e û li ser hejmareke mezin a stûnan jî zêdetir e.
  2. Guhertina şemaya daneyê hêsantir
  3. Koda zelaltir

Encam: ne ji bo her kesî. Ji ber ku leza yek ji girîngtirîn feydeyên gerdûnî ye, di karanîna vê pêkanînê de tiştek hindik e, ji ber ku ew ê bi îhtîmalek ji tabloyên di databasên pêwendiyê de zûtir pêk neyê.

3.4 Doza giştî. Dar û darên fermanî

Her avahiyek daneyê ya ku dikare wekî darek were temsîl kirin bi gerdûnan re bi tevahî li hev dike.

3.4.1 Tiştên bi bine

Global ji bo hilanîna daneyan xezîne-şûr in. Darên. Beş 2

Ev qada karanîna kevneşopî ya gerdûnan e. Di warê bijîjkî de gelek nexweşî, derman, nîşan û rêbazên dermankirinê hene. Ji bo her nexweşek bi mîlyon zevî têne çêkirin tabloyek bêaqil e. Wekî din, 99% ji zeviyan dê vala bibin.

Databasek SQL ya tabloyan bifikirin: "nexweş" ~ 100 zevî, "Derman" - 000 zevî, "Tedrapî" - 100 zevî, "Tevlîhevî" - 000 zevî, hwd. wate ya vê çîye. An jî hûn dikarin databasek bi hezaran tabloyan biafirînin, her yek ji bo celebek nexweşek taybetî (û ew dikarin li hev bikin!), dermankirin, derman, û bi hezaran tabloyên din ji bo girêdanên di navbera van tabloyan de.

Global ji bo derman îdeal in, ji ber ku ew dihêlin ku hûn ji bo her nexweşek ravekek rast a dîroka bijîjkî, dermanên cihêreng, û kiryarên dermanan, di forma darekê de, bêyî ku cîhê dîskê zêde li ser stûnên vala winda bikin, biafirînin. di rewşeke pêwendîdar de be.

Global ji bo hilanîna daneyan xezîne-şûr in. Darên. Beş 2Bi karanîna gerdûnan re hêsan e ku meriv databasek bi daneyên li ser mirovan çêbikin, dema ku girîng e ku meriv herî zêde agahdariya cihêreng di derheqê xerîdar de berhev bike û bi pergal bike. Ev di derman, banking, kirrûbirra, arşîvkirin û warên din de daxwaz e

.
Bê guman, di SQL-ê de hûn dikarin bi tenê çend tabloyan darek jî bişelînin (EAV, 1,2,3,4,5,6,7,8,9,10), Lêbelê ev bi girîngî tevlihevtir e û dê hêdîtir be. Di bingeh de, hûn neçar in ku gerdûnek ku li ser tabloyan dixebite binivîsin û hemî xebata bi tabloyan re di bin qatek abstraksiyonê de veşêrin. Ev xelet e ku meriv teknolojiya asta jêrîn (global) bi karanîna teknolojiya asta bilind (SQL) bişelîne. Inappropriate.

Ne veşartî ye ku guhartina şemaya daneyê li ser tabloyên mezin (ALTER TABLE) dikare demek maqûl bigire. Mînakî, MySQL, ALTER TABLE ADD|DOP COLUMN bi tevahî kopîkirina agahdariya ji tabloya kevin li tabloya nû (motorên MyISAM, InnoDB yên ceribandî) dike. Ku dikare databasek xebatê ya bi mîlyaran tomar bi rojan, heke ne hefteyan, daliqîne.

Global ji bo hilanîna daneyan xezîne-şûr in. Darên. Beş 2Ger em gerdûnî bikar bînin guheztina strukturên daneyê ji me re tiştek nayê. Di her kêliyê de em dikarin taybetmendiyên nû yên ku hewce ne li her tiştê, li her astek hiyerarşiyê zêde bikin. Guhertinên ku bi veguherandina navên şaxan ve girêdayî ne dikarin di paşperdeya databasek xebitandinê de werin xebitandin.


Ji ber vê yekê, dema ku dor tê hilanîna tiştên bi hejmareke mezin ji taybetmendiyên vebijarkî, gerdûnî bijarek mezin in.

Wekî din, bihêle ez ji we re bînim bîra we ku gihîştina her yek ji taybetmendiyan tavilê ye, ji ber ku di gerdûnî de hemî rê darên B-yê ne.

Databasên gerdûnî, bi gelemperî, celebek databasa belge-oriented e ku bi şiyana hilanîna agahdariya hiyerarşîk heye. Ji ber vê yekê, databasên belge-oriented dikarin di warê hilanîna tomarên bijîjkî de bi gerdûnan re pêşbaziyê bikin. Lê dîsa jî ne bi heman awayî yeKa em ji bo berhevdanê MongoDB bigirin. Di vê domanê de ji ber van sedemên jêrîn ji globalan winda dike:

  1. Mezinahiya belgeyê. Yekîneya hilanînê nivîsek bi formata JSON e (bi rastî BSON) bi qebareya herî zêde ya 16 MB. Sînorkirin bi taybetî hate çêkirin da ku databasa JSON di dema parskirinê de hêdî nebe ger belgeyek mezin a JSON tê de were hilanîn û dûv re ji hêla qadan ve were gihîştin. Divê ev belge hemî agahdariya li ser nexweşê hebe. Em hemî dizanin ku tomarên nexweşan çiqasî qalind in. Mezinahiya qertê ya herî zêde 16 MB tavilê dawî li nexweşên ku qerta nexweşiya wan pelên MRI, skanên rontgenê û lêkolînên din hene, dide. Di yek şaxek gerdûnî de hûn dikarin agahdariya gigabytes û terabytes hebin. Di prensîbê de, em dikarin dawî li vê yekê bînin, lê ez ê berdewam bikim.
  2. Dema hişbûnê / guherandin / jêbirina taybetmendiyên nû di nexşeya nexweş de. Pêdivî ye ku databasek wusa tevahî nexşeyê di nav bîranînê de bixwîne (ev mîqdarek mezin e!), BSON parsek bike, girêkek nû lê zêde bike/guhezîne/jêbibe, navnîşan nûve bike, wê di BSON de pak bike, û li ser dîskê hilîne. Gerdûnîyek tenê pêdivî ye ku bigihîje milkek taybetî û wê manîpule bike.
  3. Gihîştina bilez a taybetmendiyên kesane. Digel gelek taybetmendiyên di belgeyekê de û avahiya wê ya pir-ast, gihîştina taybetmendiyên kesane dê zûtir be ji ber vê yekê ku her rêyek di gerdûnê de dara B-yê ye. Di BSON de, hûn neçar in ku belgeyê bi xêzikî parsek bikin da ku taybetmendiya xwestinê bibînin.

3.3.2 Rêzikên hevgirtî

Rêzikên hevedudanî (tevî bi rêzikên hêlînkirî) bi rengek bêkêmasî li ser gerdûnan cîh digirin. Mînakî, rêzek wusa ji PHP-ê dê di wêneya yekem 3.3.1 de were xuyang kirin.

$a = array(
  "name" => "Vince Medvedev",
  "city" => "Moscow",
  "threatments" => array(
    "surgeries" => array("apedicectomy", "biopsy"),
    "radiation" => array("gamma", "x-rays"),
    "physiotherapy" => array("knee", "shoulder")
  )
);

3.3.3 Belgeyên hiyerarşîk: XML, JSON

Di heman demê de bi hêsanî di gerdûnan de têne hilanîn. Ji bo hilanînê dikare bi awayên cûda were danîn.

XML
Awayê herî hêsan ku meriv XML-ê di gerdûnan de pars bike ev e ku meriv taybetmendiyên tagê di girêkan de hilîne. Û heke gihîştina bilez a taybetmendiyên tagê hewce bike, wê hingê em dikarin wan bixin nav şaxên cihê.

Global ji bo hilanîna daneyan xezîne-şûr in. Darên. Beş 2

<note id=5>
<to>Вася</to>
<from>Света</from>
<heading>Напоминание</heading>
<body>Позвони мне завтра!</body>
</note>

Li ser COS ev ê bi kodê re têkildar be:

Set ^xml("note")="id=5"
Set ^xml("note","to")="Саша"
Set ^xml("note","from")="Света"
Set ^xml("note","heading")="Напоминание"
Set ^xml("note","body")="Позвони мне завтра!"

Agahkişîn: Ji bo XML, JSON, rêzikên hevgirtî, hûn dikarin gelek awayên cihêreng ên nîşandana li ser gerdûnan peyda bikin. Di vê rewşê de, me rêza jêretîketan di taga nîşeyê de nîşan neda. Gerdûnî ^xml jêretîket dê li gorî rêza alfabetîk bêne xuyang kirin. Ji bo ku emrê bi hişkî nîşan bidin, hûn dikarin, mînakî, dîmendera jêrîn bikar bînin:

Global ji bo hilanîna daneyan xezîne-şûr in. Darên. Beş 2
JSON.
Wêneya yekem ji beşa 3.3.1 ronîkirina vê belgeya JSON nîşan dide:

var document = {
  "name": "Vince Medvedev",
  "city": "Moscow",
  "threatments": {
    "surgeries": ["apedicectomy", "biopsy"],
    "radiation": ["gamma", "x-rays"],
    "physiotherapy": ["knee", "shoulder"]
  },
};

3.3.4 Avahiyên wekhev bi têkiliyên hiyerarşîk ve girêdayî ne

Wek

Databasa destpêkê. Hûn dikarin texmîna hêza lêdanê wekî nirxa pêveka girêka gerdûnî bikar bînin. Dûv re, ji bo hilbijartina tevgera herî bihêz, ew ê bes be ku şaxek bi giraniya herî mezin hilbijêrin. Di gerdûnî de, hemî şaxên li her astê dê li gorî hêza tevgerê werin rêz kirin.

Global ji bo hilanîna daneyan xezîne-şûr in. Darên. Beş 2

Struktura ofîsên firotanê, avahiya mirovan di MLM de. Nod dikarin hin nirxên caching-ê ku taybetmendiyên tevahiya binê darê nîşan didin hilînin. Mînakî, qebareya firotanê ya jêrdarek diyarkirî. Di her kêliyê de em dikarin jimareyek ku destkeftiyên her şaxekê nîşan dide bigirin.

Global ji bo hilanîna daneyan xezîne-şûr in. Darên. Beş 2

4. Di kîjan rewşan de karanîna gerdûnî pir bikêr e?

Stûna yekem rewşên ku hûn ê bi karanîna gerdûnan re bilezek girîng bistînin, û ya duyemîn dema ku sêwirandin an modela daneyê dê hêsan bibe.

Lez
Hêsaniya pêvajoyek / pêşkêşkirina daneyê

  1. Têkeve [di her astê de bi rêzkirina otomatîkî], [indekskirina bi mifteya sereke]
  2. Rakirina daran
  3. Tiştên bi gelek taybetmendiyên hêlînkirî yên ku hewceyê gihîştina kesane ne
  4. Struktura hiyerarşîk bi şiyana ku şaxên zarokan ji her şax, hetta yên tune jî, dûr bixe.
  5. Kûrahiya-yekemîn derbasbûna binê daran
  1. Tiştên / hebûnên bi hejmareke mezin ji taybetmendiyên / hebûnên vebijarkî [û/an hêlîn]
  2. Daneyên bê Schema. Dema ku taybetmendiyên nû pir caran dikarin xuya bibin û yên kevn winda bibin.
  3. Hûn hewce ne ku databasek xwerû biafirînin.
  4. Bingehên rê û darên biryarê. Gava ku ew hêsan e ku meriv riyan wekî darek temsîl bike.
  5. Rakirina strukturên hiyerarşîk bêyî bikaranîna vegerandinê

Berdewam dike “Global ji bo hilanîna daneyan xezîne-şûr in. Rêzikên kêm. Beş 3".

Disclaimer: Ev gotar û şîroveyên min ên li ser wê nerîna min e û ti têkiliya wê bi helwesta fermî ya InterSystems Corporation re tune.

Source: www.habr.com

Add a comment