Edistynyt PostgreSQL: indeksointi, osiointi ja replikointi · Oppitunti

Käytännön tapaustutkimukset

Tutkikaa käytännön esimerkkejä ja oppikaa suurten järjestelmien onnistuneista indeksointi- ja osiointitoteutuksista.

Oppitunti 3/411 vaihetta

Käytännön tapaustutkimukset on ilmainen Edistynyt PostgreSQL: indeksointi, osiointi ja replikointi-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Edistynyt PostgreSQL: indeksointi, osiointi ja replikointi-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Edistynyt PostgreSQL: indeksointi, osiointi ja replikointi-kurssilla on yhteensä 4 oppituntia.

Indeksointi ja osiointi käytännössä

Tervetuloa viimeiseen oppituntiin! Olemme oppineet indekseistä ja osioinnista erikseen. Nyt tarkastelemme, miten näitä tehokkaita ominaisuuksia yhdistetään todellisissa, suurissa järjestelmissä.

Tutkimme käytännön tapaustutkimuksia nähdäksemme, miten tietokanta-arkkitehdit soveltavat näitä strategioita monimutkaisten suorituskyky- ja hallintaongelmien ratkaisemiseen.

Tapaustutkimus 1: verkkokaupan tilaukset

Kuvitelkaa suosittu verkkokauppa-alusta, joka käsittelee miljoonia tilauksia päivittäin. Sen orders-taulu kasvaa nopeasti ja sisältää vuosien tapahtumahistorian.

  • Haaste: Tuoreiden tilausten kyselyt ovat nopeita, mutta historiaraportit tai asiakaspalvelun haut vanhoista tilauksista ovat erittäin hitaita.
  • Ongelma: Yhtä valtavaa orders-taulua on vaikea ylläpitää ja varmuuskopioida, ja indeksien koko kasvaa hallitsemattomaksi.

Ratkaisu: päivämäärään perustuva alueosiointi

Verkkokaupan haasteen ratkaisemiseksi tiimi päättää toteuttaa alueosioinnin order_date-sarakkeelle. Tämä jakaa suuren taulun pienempiin ja helpommin hallittaviin osioihin, yleensä kuukausi- tai vuositasolla.

Tuoreita tietoja koskevissa kyselyissä tarkistetaan vain uusimmat osiot, mikä nopeuttaa yleisiä toimintoja huomattavasti. Vanhemmat osiot voidaan arkistoida tai niitä voidaan käyttää harvemmin.

CREATE TABLE orders (
    order_id BIGINT NOT NULL,
    customer_id INT NOT NULL,
    order_date DATE NOT NULL,
    total_amount NUMERIC(10, 2)
) PARTITION BY RANGE (order_date);

CREATE TABLE orders_y2023m01 PARTITION OF orders
    FOR VALUES FROM ('2023-01-01') TO ('2023-02-01');

Ratkaisu: paikalliset indeksit tilauksille

Kun osiointi on käytössä, indeksit luodaan *paikallisesti* kullekin osiolle. Tällöin jokaisella osiolla on oma pienempi indeksinsä koko taulun kattavan yhden valtavan indeksin sijaan.

  • Hyöty: Pienemmät indeksit ovat nopeampia hakea ja päivittää.
  • Hyöty: Tiettyyn osioon kohdistuvissa kyselyissä (esimerkiksi asiakastunnuksen perusteella tietyn kuukauden aikana) käytetään vain kyseisen osion indeksiä.
CREATE INDEX idx_orders_y2023m01_customer_id
ON orders_y2023m01 (customer_id);

CREATE INDEX idx_orders_y2023m01_order_id
ON orders_y2023m01 (order_id);

Verkkokaupan tapaustutkimuksen tulos

Alueosioinnin ja paikallisten indeksien yhdistelmä paransi verkkokauppa-alustan suorituskykyä merkittävästi:

  • Tuoreita tietoja koskevien kyselyiden suoritusajat lyhenivät 80 %.
  • Tietokannan ylläpitotehtävät (kuten VACUUM) nopeutuivat huomattavasti pienemmissä osioissa.
  • Vanhat tiedot voitiin arkistoida tai poistaa tehokkaasti irrottamalla ja poistamalla vanhat osiot.

Tapaustutkimus 2: IoT-anturitiedot

Seuraavaksi tarkastelemme esineiden internetin (IoT) alustaa, joka kerää anturitietoja miljoonista laitteista. Kukin laite lähettää mittaustietoja muutaman sekunnin välein, mikä tuottaa petatavuittain aikasarjatietoja.

  • Haaste: Tietojen vastaanottaminen erittäin suurella nopeudella ja monipuolisten analyysikyselyiden suorittaminen (esimerkiksi "etsi kaikki laitteet, jotka ilmoittivat lämpötilan > X alueella Y viime viikon aikana").
  • Ongelma: Aikaleimojen tavalliset B-tree-indeksit ovat tällaisilla tietomäärillä liian suuria ja hitaita päivitettäviksi.

Ratkaisu: yhdistelmäosiointi

IoT-tiedoille yhdistelmäosiointistrategia on usein ihanteellinen. Tiimi toteutti seuraavat ratkaisut:

  1. Aikaan perustuva alueosiointi: Ensisijainen osiointiavain on timestamp, jonka perusteella tiedot jaetaan päivä- tai tuntitasolle.
  2. Laitetyyppiin perustuva luettelo-osiointi: Kunkin aikaosion sisällä tiedot osioidaan edelleen device_type-sarakkeen perusteella (esimerkiksi 'sensor', 'actuator' ja 'gateway').

Tämä mahdollistaa tehokkaan karsinnan sekä ajan että laitteen ominaisuuksien perusteella.

CREATE TABLE sensor_data (
    timestamp TIMESTAMPTZ NOT NULL,
    device_id INT NOT NULL,
    device_type TEXT NOT NULL,
    reading_value NUMERIC(10, 2)
) PARTITION BY RANGE (timestamp);

CREATE TABLE sensor_data_2024_01_01 PARTITION OF sensor_data
    FOR VALUES FROM ('2024-01-01 00:00:00') TO ('2024-01-02 00:00:00')
    PARTITION BY LIST (device_type);

Ratkaisu: erikoistuneet indeksit

IoT-kyselyiden monipuolisuuden käsittelemiseksi käytettiin erilaisten erikoistuneiden indeksien yhdistelmää:

  • BRIN-indeksi aikaleimalle: Aikaan kohdistuvissa aluekyselyissä BRIN (Block Range Index) on erittäin tehokas luonnostaan järjestetyille tiedoille ja vie vain vähän tilaa.
  • B-Tree-indeksi laitetunnukselle: Kunkin alaosion paikalliset B-tree-indeksit sarakkeelle device_id varmistavat tiettyjen laitteiden nopeat haut.
  • GIN-indeksi tunnisteille: Jos laitteisiin liittyy tunnisteita (esimerkiksi tags JSONB), GIN-indeksi voi nopeuttaa JSONB-kenttien sisältä tehtäviä hakuja.
CREATE INDEX brin_idx_sensor_data_time
ON sensor_data USING BRIN (timestamp);

CREATE INDEX btree_idx_sensor_data_device_id
ON sensor_data_2024_01_01_sensor (device_id);

-- Example for a JSONB column
-- CREATE INDEX gin_idx_sensor_data_tags
-- ON sensor_data USING GIN (tags jsonb_path_ops);

IoT-tapaustutkimuksen tulos

IoT-tietojen yhdistelmästrategia tuotti merkittäviä parannuksia:

  • Tietojen vastaanottonopeus säilyi huipputasolla ilman suorituskyvyn heikkenemistä.
  • Laajoja aikavälejä koskevat analyysikyselyt optimoitiin osioiden karsinnan ja BRIN-indeksien avulla.
  • Tiettyjen laitteiden haut ja tunnisteisiin perustuvat haut tehostuivat huomattavasti paikallisten B-tree- ja GIN-indeksien ansiosta.

Tämä lähestymistapa tarjosi sekä suuren kirjoitussuorituskyvyn että joustavan lukusuorituskyvyn.

Sovella oppimaasi

Mitä keskeisiä seikkoja on otettava huomioon suunniteltaessa indeksointi- ja osiointistrategiaa suurille PostgreSQL-tietokannoille tapaustutkimusten perusteella?

Kertaus: tapaustutkimusten opetukset

Tässä oppitunnissa tarkastelimme kahta tosielämän tapausta, jotka osoittavat PostgreSQL:n indeksoinnin ja osioinnin yhdistämisen tehon:

  • Verkkokauppa: Historiallisille tilaustiedoille käytettiin päivämäärään perustuvaa alueosiota ja paikallisia B-tree-indeksejä, mikä nopeutti kyselyitä ja helpotti hallintaa.
  • IoT-data: Suurten tietomäärien monipuolisten kyselyiden tueksi käytettiin yhdistelmäosiointia (aikaan perustuva alueosiointi ja laitetyypin perusteella tehtävä listaosiointi) sekä erikoistuneita BRIN-, B-tree- ja GIN-indeksejä.

Nämä esimerkit osoittavat, että paras strategia perustuu usein tekniikoiden harkittuun yhdistelmään, joka mukautetaan tietojesi ja työkuormasi mukaan.

Aloita maksutta

Opi Edistynyt PostgreSQL: indeksointi, osiointi ja replikointi tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
11
Oppitunnit
44

Usein kysytyt kysymykset

Onko oppitunti ”Käytännön tapaustutkimukset” ilmainen?

Kyllä – oppitunnin ”Käytännön tapaustutkimukset” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Edistynyt PostgreSQL: indeksointi, osiointi ja replikointi-kurssin, päivitä CoddyKit PROhon. Edistynyt PostgreSQL: indeksointi, osiointi ja replikointi-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Käytännön tapaustutkimukset”?

Tutkikaa käytännön esimerkkejä ja oppikaa suurten järjestelmien onnistuneista indeksointi- ja osiointitoteutuksista. Harjoittelet Edistynyt PostgreSQL: indeksointi, osiointi ja replikointi-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Edistynyt PostgreSQL: indeksointi, osiointi ja replikointi-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Edistynyt PostgreSQL: indeksointi, osiointi ja replikointi-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Käytännön tapaustutkimukset”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Edistynyt PostgreSQL: indeksointi, osiointi ja replikointi-oppitunnilla?

Kyllä. Jokainen Edistynyt PostgreSQL: indeksointi, osiointi ja replikointi-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Indeksien skaalaaminen osioinnilla
  2. Indeksi- ja osiointistrategioiden valinta
  3. Käytännön tapaustutkimukset
  4. BRIN-indeksit suurille osioiduille tauluille
← Takaisin: Edistynyt PostgreSQL: indeksointi, osiointi ja replikointi