Jak provést sdružování připojení
Každá platforma má jiné rozhraní sdružování připojení. Budete si muset přečíst dokumentaci pro konkrétní platformu, kterou používáte (Ruby+Rails nebo cokoli jiného), nebo použít generickou sdružovací střední vrstvu, jako je PgBouncer.
Odpovědi týkající se jednoho nástroje (řekněme PHP se Zend Framework) nebudou mít nic společného s odpověďmi souvisejícími s jiným nástrojem (jako je Ruby on Rails). I když si vyberete něco jako PgBouncer, stále existují podrobnosti související s tím, jak platforma zpracovává životnost transakcí, režim sdružování, který si můžete vybrat podle potřeb aplikace atd.
Nejprve si tedy musíte určit, co používáte a co s tím musíte udělat. Potom prostudujte si, jak nastavit jeho sdružování připojení. (U mnoha nástrojů je to jen automatické).
Pokud jste stále uvízli po přečtení dokumentace pro platformu, kterou si vyberete , zeptejte se nového podrobného a konkrétního otázka označená vhodně pro platformu.
Pooling a middleware
Nenechte svou aplikaci připojit přímo k PostgreSQL. Zejména pokud je to přes internet od náhodných klientů.
Použijte webový server v blízkosti serveru PostgreSQL a nechte jej přijímat požadavky webových služeb na zprostředkovatele přístupu k databázi prostřednictvím dobře definovaného webového rozhraní API s krátkými transakcemi, které jsou v co největším rozsahu přizpůsobeny požadavkům.
Toto není jen případ přijaté moudrosti – existují dobré důvody, proč to udělat, a vážné problémy se spouštěním PostgreSQL z náhodných zařízení přes internet.
Aplikace pro Android mluví přímo s Pg
Problémy s mluvením s Pg přímo přes internet z mnoha klientů zahrnují:
-
Každý backend PostgreSQL má svou cenu, ať je nečinný nebo ne. PgBouncer v režimu sdružování transakcí s tím do určité míry pomáhá.
-
Při práci přes internet se připojení náhodně ztratí. Výpadky WiFi, změny IP adresy u dynamických IP služeb, mobilní služba, která slábne nebo má maximální kapacitu, nebo se prostě potácí spolu s vysokou ztrátou paketů. Díky tomu budete mít mnoho připojení PostgreSQL v neurčitých stavech, pravděpodobně s otevřenými transakcemi, což vám dává
<IDLE> in transaction
problémy a potřeba povolit mnohem více připojení, než skutečně funguje. -
Je to transakční – pokud se něco nedokončí, můžete transakci ukončit a vědět, že to nebude mít žádný účinek.
Výhody střední vrstvy
Velkou výhodou může být server, který reaguje na požadavky webové služby HTTP z vaší aplikace na zařízeních Android, aby fungoval jako zprostředkovatel pro přístup k databázi.
-
Můžete definovat verzované API, takže když zavádíte nové funkce nebo potřebujete změnit API, nemusíte rušit staré klienty. To je možné s Pg pomocí uložených procedur nebo mnoha pohledů, ale může to být neohrabané.
-
Přísně řídíte rozsah přístupu k databázi a životnost transakcí.
-
Můžete definovat idempotentní API, kde spuštění stejného požadavku vícekrát má pouze jeden účinek. (Důrazně to doporučuji udělat kvůli dalšímu bodu).
-
Vše je bezstavové a může mít krátké časové limity. Pokud něco nefunguje, zkuste to znovu.
-
Každé připojení k databázi jde přes fond, takže nemusíte mít nečinné relace. Každý databázový backend tvrdě pracuje na maximální propustnosti.
-
Můžete se zařadit do fronty, místo abyste se pokoušeli dělat tuny současně a mlátit server. (Můžete to také provést pomocí PgBouncer v režimu sdružování transakcí).
... a zopakujte svou úpravu, abyste změnili význam otázky:
Výkon
Vaše „také“ opětovné představení je ve skutečnosti úplně jiná otázka (a měla by být nejlépe zveřejněna jako taková). Velmi krátká verze:zcela nemožné předvídat bez mnohem více informací o pracovní zátěži, jako je počet požadavků na databázi na žádost klientské aplikace, druh dat, druh dotazů, velikost dat, frekvence dotazů, praktičnost ukládání do mezipaměti, .. .... nekonečně. Každý, kdo tvrdí, že definitivně zodpověděl tuto otázku, je buď první skutečný jasnovidec v historii, nebo je toho úplně plný.
Musíte zhruba zjistit, jaká bude velikost vašich dat, vzory dotazů atd. Zjistěte, kolik si můžete dovolit ukládat do mezipaměti ve střední vrstvě, jako je redis/memcached, jak zastaralou ji můžete nechat, jakou úroveň zneplatnění mezipaměti potřebujete. Zjistěte, zda se vaše „horká“ datová sada (ke které často přistupujete) vejde do RAM nebo ne. Určete, zda se indexy pro často dotazované tabulky vejdou do paměti RAM nebo ne. Zjistěte, jaký je váš hrubý poměr čtení/zápisu a do jaké míry budou vaše zápisy pravděpodobně pouze vkládat (připojit) nebo pravidelněji OLTP (vkládat/aktualizovat/smazat). Vytvořte falešnou sadu dat a některé klientské úlohy. Potom můžete začít odpovídat na tuto otázku - možná. Abyste to udělali správně, musíte také simulovat zastavené/mizející klienty atd.
Podívejte se, proč to není jen "Také?".