Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Fontos
Az Azure Cosmos DB for PostgreSQL már nem támogatott új projektek esetén. Ne használja ezt a szolgáltatást új projektekhez. Ehelyett használja az alábbi két szolgáltatás egyikét:
Az Azure Cosmos DB for NoSQL használata nagy léptékű forgatókönyvekhez tervezett elosztott adatbázis-megoldáshoz 99,999% rendelkezésre állási szolgáltatásiszint-szerződéssel (SLA), azonnali automatikus skálázással és automatikus feladatátvétellel több régióban.
Használja az Azure Database For PostgreSQL Rugalmas fürtök funkcióját a megosztott PostgreSQL-hez a nyílt forráskódú Citus-bővítmény használatával.
Ebben az oktatóanyagban az Azure Cosmos DB for PostgreSQL használatával megtudhatja, hogyan:
- Fürt létrehozása
- Séma létrehozása a psql segédprogrammal
- Csomópontok közötti szegmenstáblák
- Mintaadatok létrehozása
- Összesítések végrehajtása
- Nyers és összesített adatok lekérdezése
- Lejáró adatok
Előfeltételek
Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot.
Fürt létrehozása
Jelentkezzen be az Azure Portalra , és kövesse az alábbi lépéseket egy Azure Cosmos DB for PostgreSQL-fürt létrehozásához:
Lépjen az Azure portálon a Azure Cosmos DB PostgreSQL klaszter létrehozása elemre.
Az Azure Cosmos DB for PostgreSQL-fürt létrehozása űrlapon:
Adja meg az Alapvető beállítások lapon kért adatokat.
A legtöbb beállítás egyértelmű, de tartsa szem előtt a következőket:
- A fürt neve határozza meg az alkalmazások által a csatlakozáshoz használt DNS-nevet az alakban
<node-qualifier>-<clustername>.<uniqueID>.postgres.cosmos.azure.com. - Választhat egy fő PostgreSQL-verziót, például a 15-öt. Az Azure Cosmos DB for PostgreSQL mindig a legújabb Citus-verziót támogatja a kiválasztott fő Postgres-verzióhoz.
- A rendszergazdai felhasználónév legyen
citus. - Meghagyhatja az adatbázis nevét az alapértelmezett "citus" értéknél, vagy megadhatja az egyetlen adatbázisnevet. A fürt kiépítése után nem nevezheti át az adatbázist.
- A fürt neve határozza meg az alkalmazások által a csatlakozáshoz használt DNS-nevet az alakban
Válassza a Tovább elemet : Hálózatkezelés a képernyő alján.
A Hálózatkezelés képernyőn válassza a Nyilvános hozzáférés engedélyezése az Azure-szolgáltatásokból és az Azure-beli erőforrásokból a fürthöz lehetőséget.
Válassza a Felülvizsgálat + létrehozás elemet, majd az ellenőrzés elvégzése után kattintson a Létrehozás gombra a fürt létrehozásához.
Az üzembe helyezés eltarthat néhány percig. Az oldal az üzembe helyezés megfigyelésére irányít át. Amikor az állapot az Üzembe helyezés folyamatban után az Az üzembe helyezés befejeződött értékre vált, válassza az Ugrás az erőforrásra lehetőséget.
Séma létrehozása a psql segédprogrammal
Miután a psql használatával csatlakozott az Azure Cosmos DB for PostgreSQL-hez, elvégezhet néhány alapvető feladatot. Ez az oktatóanyag végigvezeti a forgalmi adatok webelemzésből való betöltésén, majd az adatok üzembe helyezésén, hogy valós idejű irányítópultokat biztosítson az adatok alapján.
Hozzunk létre egy táblát, amely az összes nyers webes forgalmi adatot felhasználja. Futtassa a következő parancsokat a psql-terminálban:
CREATE TABLE http_request (
site_id INT,
ingest_time TIMESTAMPTZ DEFAULT now(),
url TEXT,
request_country TEXT,
ip_address TEXT,
status_code INT,
response_time_msec INT
);
Továbbá létrehozunk egy táblát, amely tárolja a percenkénti adatok összesítéseit, és egy táblát, amely megőrzi az utolsó összesített adataink pozícióját. Futtassa a következő parancsokat a psql-ben is:
CREATE TABLE http_request_1min (
site_id INT,
ingest_time TIMESTAMPTZ, -- which minute this row represents
error_count INT,
success_count INT,
request_count INT,
average_response_time_msec INT,
CHECK (request_count = error_count + success_count),
CHECK (ingest_time = date_trunc('minute', ingest_time))
);
CREATE INDEX http_request_1min_idx ON http_request_1min (site_id, ingest_time);
CREATE TABLE latest_rollup (
minute timestamptz PRIMARY KEY,
CHECK (minute = date_trunc('minute', minute))
);
Az újonnan létrehozott táblák most már láthatók a táblák listájában ezzel a psql-paranccsal:
\dt
Csomópontok közötti szegmenstáblák
Az Azure Cosmos DB for PostgreSQL üzembe helyezése különböző csomópontokon tárolja a táblasorokat a felhasználó által kijelölt oszlop értéke alapján. Ez a "terjesztési oszlop" jelzi, hogy az adatok hogyan vannak elosztva a csomópontok között.
Állítsuk be az elosztási oszlopot úgy, hogy a site_id, a szegmenskulcs legyen. A psql-ben futtassa az alábbi függvényeket:
SELECT create_distributed_table('http_request', 'site_id');
SELECT create_distributed_table('http_request_1min', 'site_id');
Fontos
Táblák elosztása vagy sémaalapú horizontális skálázás szükséges az Azure Cosmos DB for PostgreSQL teljesítményfunkcióinak kihasználásához. Ha nem terjeszt táblákat vagy sémákat, akkor a feldolgozó csomópontok nem tudnak az adataikkal kapcsolatos lekérdezéseket futtatni.
Mintaadatok létrehozása
Most a klaszterünknek készen kell állnia arra, hogy néhány adatot betöltsön. Az adatok folyamatos beszúrásához helyileg futtathatjuk a következőt a kapcsolatból psql .
DO $$
BEGIN LOOP
INSERT INTO http_request (
site_id, ingest_time, url, request_country,
ip_address, status_code, response_time_msec
) VALUES (
trunc(random()*32), clock_timestamp(),
concat('http://example.com/', md5(random()::text)),
('{China,India,USA,Indonesia}'::text[])[ceil(random()*4)],
concat(
trunc(random()*250 + 2), '.',
trunc(random()*250 + 2), '.',
trunc(random()*250 + 2), '.',
trunc(random()*250 + 2)
)::inet,
('{200,404}'::int[])[ceil(random()*2)],
5+trunc(random()*150)
);
COMMIT;
PERFORM pg_sleep(random() * 0.25);
END LOOP;
END $$;
A lekérdezés másodpercenként körülbelül nyolc sort szúr be. A sorok a terjesztési oszlop site_idutasításainak megfelelően különböző feldolgozó csomópontokon vannak tárolva.
Feljegyzés
Hagyja futni az adatgenerálási lekérdezést, és nyisson meg egy második psql-kapcsolatot az oktatóanyag többi parancsához.
Lekérdezés
Az Azure Cosmos DB for PostgreSQL lehetővé teszi, hogy több csomópont párhuzamosan dolgozza fel a lekérdezéseket a sebesség érdekében. Az adatbázis például kiszámítja az olyan összesítéseket, mint a SUM és a COUNT a feldolgozó csomópontokon, és az eredményeket végső válaszként egyesíti.
Az alábbiakban egy lekérdezést talál a webes kérelmek percenkénti megszámlálására, valamint néhány statisztikai adatot. Próbálja meg futtatni a psql-ben, és figyelje meg az eredményeket.
SELECT
site_id,
date_trunc('minute', ingest_time) as minute,
COUNT(1) AS request_count,
SUM(CASE WHEN (status_code between 200 and 299) THEN 1 ELSE 0 END) as success_count,
SUM(CASE WHEN (status_code between 200 and 299) THEN 0 ELSE 1 END) as error_count,
SUM(response_time_msec) / COUNT(1) AS average_response_time_msec
FROM http_request
WHERE date_trunc('minute', ingest_time) > now() - '5 minutes'::interval
GROUP BY site_id, minute
ORDER BY minute ASC;
Adatok összegzése
Az előző lekérdezés a korai szakaszokban jól működik, de az adatskálázás során csökken a teljesítménye. Az elosztott feldolgozás esetén is gyorsabb az adatok előzetes kiszámítása, mint az ismételt újraszámítás.
Biztosíthatjuk az irányítópult gyors maradását, ha rendszeresen összesítjük a nyers adatokat egy aggregált táblába. Kísérletezhet az összesítés időtartamával. Percenkénti összesítési táblát használtunk, de az adatokat 5, 15 vagy 60 percre bonthatja.
Annak érdekében, hogy ezt az összesítést könnyebben futtathassuk, egy plpgsql-függvénybe fogjuk helyezni. Futtassa ezeket a parancsokat a psql-ben a rollup_http_request függvény létrehozásához.
-- initialize to a time long ago
INSERT INTO latest_rollup VALUES ('10-10-1901');
-- function to do the rollup
CREATE OR REPLACE FUNCTION rollup_http_request() RETURNS void AS $$
DECLARE
curr_rollup_time timestamptz := date_trunc('minute', now());
last_rollup_time timestamptz := minute from latest_rollup;
BEGIN
INSERT INTO http_request_1min (
site_id, ingest_time, request_count,
success_count, error_count, average_response_time_msec
) SELECT
site_id,
date_trunc('minute', ingest_time),
COUNT(1) as request_count,
SUM(CASE WHEN (status_code between 200 and 299) THEN 1 ELSE 0 END) as success_count,
SUM(CASE WHEN (status_code between 200 and 299) THEN 0 ELSE 1 END) as error_count,
SUM(response_time_msec) / COUNT(1) AS average_response_time_msec
FROM http_request
-- roll up only data new since last_rollup_time
WHERE date_trunc('minute', ingest_time) <@
tstzrange(last_rollup_time, curr_rollup_time, '(]')
GROUP BY 1, 2;
-- update the value in latest_rollup so that next time we run the
-- rollup it will operate on data newer than curr_rollup_time
UPDATE latest_rollup SET minute = curr_rollup_time;
END;
$$ LANGUAGE plpgsql;
Miután a függvény a helyén van, végezze el az adatok összesítését:
SELECT rollup_http_request();
Az előre összesített adatokkal pedig lekérdezhetjük az összesítő táblát, hogy ugyanazt a jelentést kapjuk, mint korábban. Futtassa az alábbi lekérdezést:
SELECT site_id, ingest_time as minute, request_count,
success_count, error_count, average_response_time_msec
FROM http_request_1min
WHERE ingest_time > date_trunc('minute', now()) - '5 minutes'::interval;
Régi adatok lejárata
Az összesítések felgyorsítják a lekérdezéseket, de továbbra is törölnünk kell a régi adatokat, hogy elkerüljük a korlátlan tárolási költségeket. Döntse el, hogy mennyi ideig szeretné megőrizni az adatokat az egyes részletességhez, és szabványos lekérdezésekkel törölje a lejárt adatokat. A következő példában úgy döntöttünk, hogy a nyers adatokat egy napig, a percenkénti összesítéseket pedig egy hónapig tároljuk:
DELETE FROM http_request WHERE ingest_time < now() - interval '1 day';
DELETE FROM http_request_1min WHERE ingest_time < now() - interval '1 month';
Éles környezetben ezeket a lekérdezéseket egy függvénybe csomagolhatja, és percenként meghívhatja egy cron-feladatban.
Az erőforrások eltávolítása
Az előző lépésekben Azure erőforrásokat hozott létre egy fürtben. Ha a jövőben nem lesz szüksége ezekre az erőforrásokra, törölje a klasztert. A fürt Áttekintés lapján nyomja le a Törlés gombot. Amikor a rendszer egy előugró lapon kéri, erősítse meg a fürt nevét, és kattintson a végleges Törlés gombra.
Következő lépések
Ebben az oktatóanyagban megtanulta, hogyan építhet ki fürtöt. Csatlakozott a psql-hez, létrehozott egy séma és szétosztotta az adatokat. Megtanulta, hogyan kérdezhet le adatokat nyers formában, hogyan lehet rendszeresen összesíteni az adatokat, lekérdezni az összesített táblákat, és régi adatokat lekésni.
- Tudnivalók a fürtcsomópont-típusokról
- A fürt optimális kezdeti méretének meghatározása