sql - Mikä on paras oletustapahtumien eristämisen taso ERP: lle, jos sellaista on?

Translate

Lyhyt tausta: Olemme vasta aloittamassa ERP-järjestelmän siirtämistä / uudelleenkäynnistämistä Java-tilaan horrostilassa ja kohdistamalla järjestelmää käyttävien 50-100 käyttäjän samanaikaiseen käyttäjämäärään. Käytämme MS SQL Serveriä tietokantapalvelimena, joka on tarpeeksi hyvä tähän lataamiseen.

Nyt vanha järjestelmä ei käytä lainkaan tapahtumia ja luottaa kriittisiin osiin (esim. Varastomuutoksiin) manuaalisten lukkojen asettamiseen (lippujen avulla) ja vapauttamiseen. Se on jotain manuaalista tapahtumien hallintaa. Mutta tietojen epäjohdonmukaisuudessa on joskus ongelmia. Uudessa järjestelmässä haluaisimme käyttää tapahtumia näiden ongelmien poistamiseen.

Nyt kysymys: Mikä olisi hyvä / kohtuullinenoletuksenaERP-järjestelmässä käytettävä tapahtumaeristystaso, kun käytetään noin 85% OLTP: tä ja 15% OLAP: ta? Vai pitäisikö minun aina päättää tehtäväkohtaisesti, mitä tapahtumatasoa käyttää?

Ja muistutuksena neljä tapahtuman eristyksen tasoa: LUE SITOUTUMATON, LUE SITOUTU, TOISTETTAVA LUE, SERIALISOITAVA

This question and all comments follow the "Attribution Required."

Kaikki vastaukset

Translate

99 kertaa 100: sta, sitoutuneiden lukeminen on oikea vastaus. Näin varmistat, että näet vain toisen istunnon tekemät muutokset (ja siten johdonmukaiset tulokset olettaen, että olet suunnitellut tapahtumasi oikein). Mutta se ei aseta lukittavia yleiskustannuksia (etenkään muissa kuin Oracle-tietokannoissa), jotka voidaan toistaa toistettavalla tai sarjoitettavalla tavalla.

Hyvin satunnaisesti kannattaa ehkä luoda raportti, jossa olet valmis uhraamaan tarkkuuden nopeuden vuoksi ja asettamaan lukemattoman sitoutumattomuuden tason. Se on harvoin hyvä idea, mutta se on toisinaan kohtuullisen hyväksyttävä ratkaisu kiistakysymysten lukitsemiseen.

Sarjoitettavaa ja toistettavaa lukua käytetään joskus, kun sinulla on prosessi, jonka täytyy nähdä yhtenäinen tietojoukko koko ajon aikana riippumatta siitä, mitä muita tapahtumia tuolloin tehdään. Voi olla tarkoituksenmukaista asettaa kuukauden lopun täsmäytysprosessi sarjoitettavaksi, esimerkiksi jos on olemassa paljon menettelykoodia, mahdollisuus, että käyttäjät tekevät muutoksia prosessin ollessa käynnissä, ja vaatimus, että prosessi on Varmista, että se näkee tiedot aina sellaisina kuin ne olivat olemassa sovittelun alkaessa.

Lähde
Translate

Älä unohda SNAPSHOTia, joka on aivan SERIALIZABLE alapuolella.

Se riippuu siitä, kuinka tärkeää on, että tiedot ovat tarkkoja raporteissa. Se on todella tehtävä tehtävä kerrallaan.

Lähde
Translate

Se riippuu todella paljon sovelluksen suunnittelusta, helppo vastaus suoritetaan vain osoitteessa READ_COMMITTED.

Voit tehdä argumentin, että jos suunnittelet järjestelmän mielessäsi, voit käyttää READ_UNCOMMITTED-tiedostoa oletuksena ja lisätä eristystasoa vain silloin, kun sitä tarvitset. Suurin osa tapahtumista onnistuu joka tapauksessa, joten sitomattomien tietojen lukeminen ei ole iso juttu.

Tapa, jolla eristystasot vaikuttavat kyselyihisi, riippuu kohdetietokannasta. Esimerkiksi tietokantojen, kuten Sybase ja MSSQL, on lukittava enemmän resursseja, kun suoritat READ_COMMITTED, kuin tietokannoista, kuten Oracle.

Lähde
Translate

SQL Serverille (ja luultavasti suurimmalle osalle RDBMS) pidän kiinni oletusasetuksesta. SQL Serverillä tämä on LUKU SITOUTETTU. Kaikki enemmän ja alat verottaa DB: tä, mikä tahansa vähemmän ja sinulla on johdonmukaisuusongelmia.

Lähde
Translate

Read Uncommitted on ehdottomasti underdog useimmilla foorumeilla. Sen käyttämiseen on kuitenkin syitä, jotka ylittävät usein korostetun kysymyksen "nopeus vs. tarkkuus".

Oletetaan, että sinulla on:

  • Tapahtuma T1: kirjoittaa B, lukee A, (vielä lisää työtä), sitoutu.
  • Tapahtuma T2: kirjoittaa A, lukee B, (vielä lisää työtä), sitoutu.

Kun luettu on sitoutunut, yllä olevat tapahtumat eivät vapaudu ennen sitoutumista. Sitten voit törmätä tilanteeseen, jossa T1 odottaa, että T2 vapauttaa A: n, ja T2 odottaa, että T1 vapauttaa B: n. Tässä kaksi tapahtumaa törmäävät lukkoon.

Voit kirjoittaa nämä menettelyt uudelleen tämän skenaarion välttämiseksi (esimerkki: hanki resursseja aina aakkosjärjestyksessä!). Silti, jos liian monta samanaikaista käyttäjää ja kymmeniä tuhansia koodiriviä, tästä ongelmasta voi tulla sekä erittäin todennäköinen että erittäin vaikea diagnosoida ja ratkaista.

Vaihtoehtoisesti käytetään lukemattomia. Suunnittelet sitten tapahtumasi olettaen, että lukuja voi olla likainen. Henkilökohtaisesti mielestäni tämä ongelma on paljon paikallisempi ja hoidettavampi kuin lukkiutuvat junahyllyt.

Likaisten lukujen ongelmat voidaan estää

  • (1) Palautukset: älä. Tämän pitäisi olla viimeinen puolustuslinja vain laitteistohäiriöiden, verkkovirheiden tai ohjelman kaatumisen yhteydessä.

  • (2) Käytä sovelluksen lukituksia luodaksesi lukitusmekanismin, joka toimii korkeammalla abstraktiotasolla, jossa kukin lukko on lähempänä reaalimaailman resurssia tai toimintaa.

Lähde
Leave a Reply
You must be logged in to post a answer.
Kirjailijasta