jedna velká databáze vs. několik menších
<p>máme situaci, kdy můžeme (a) implementovat instance aplikací do jedné databáze mysql pomocí předpony tabulky nebo (b) používat různé databáze mysql pro každou instanci aplikace, například</p><p>nastavení „a“:</p><pre><code>central\_database app1\_table1 app1\_table2 app1\_tablen ... appn\_table1 appn\_table2 appn\_tablen </code></pre><p>konečným výsledkem je velký db s mnoha tabulkami.</p><p>nastavení "b":</p><pre><code>app1\_db table1 table2 tablen ... appn\_db table1 table2 tablen </code></pre><p>konečným výsledkem je mnoho databází s některými tabulkami.</p><p>všechny věci jsou stejné (např. množství dat, počet instancí aplikace atd.), jaké jsou výhody a nevýhody plynoucí z obou přístupů? co by poškodilo výkon a údržbu databáze? aplikace je založena na php 5), běží přes apache 2.x a my provozujeme mysql 5.x.</p><p>děkujeme za váš čas a myšlenky!</p>
<p>provozoval jsem systém s nejlepší částí z tisíce databází rozložených na více serverech. všechny byly identické struktury a byly synchronizovány s databází šablon, která byla na každém počítači.</p><p>to mi umožnilo migrovat databáze z jednoho db na druhý, pokud by se jeden příliš přetěžoval, a když se změnil klientský mix, mohl jsem na různých serverech vytvářet nové databáze, abych mohl načíst rovnováhu mezi servery. to byla největší výhoda, kterou jsem získal od systému, v tom, že jsem měl na několika samostatných serverech několik velkých kusů cínu, které prováděly více komplikovaných dotazů současně.</p><p>skvělá věc je, že můžete do konfigurace přidat servery svou vlastní rychlostí, protože každý server se začíná přetížit, přidat další do mixu, přenést některé dbs na nový server a skončit pěkně načíst vyváženou sadu serverů. opravdu pěkný a jednoduchý způsob, jak přidat měřítko do systému, kdykoli je to potřeba!</p><p>důvodem, proč jsem šel s tímto přístupem spíše než s jediným obrovským databázovým přístupem, byla naprostá velikost potenciální databáze, která by byla vytvořena ... každá z 1000 databází měla 200 tabulek a mnoho jednotlivých tabulek v každé z databáze obsahovaly mnoho stovek <strong>milionů</strong> řádků dat!</p><p>konfigurace jediné databáze by vyžadovala, aby určité tabulky (přibližně 8 z nich) měly více miliard řádků dat a celková velikost db by byla přes 10tb. podařilo se nám mít více serverů s 5tb úložiště raid 10, s mnoha databázemi na každém.</p><p>to bych udělal! doufám, že to pomůže vašemu rozhodování ... :)</p>
Pokud to ate jen na zalohy, tak bych to videl trosku predimenzovano. Stredni podniky je spis mysleno, ze by se na tom provozovali i aplikace. Abyste na jedno mistozalohoval par dat a mel pristup na souboru, k tomu moc nepotrebujete. Použito v malém rozsahu pro evidenci ve vlastním podnikání. Vyzkoušej, je trochu jiný než Acces ale nemá špatné možnosti. Pokud chceš ještě více funkcionality, můžeš zkusit lokální instalaci mysql serveru a LOB použít jako klienta. Udělej si dvě tabulky. V jedné budeš mít kompletní info a ve druhé jen požadovaný výstup. Pokud budeš mít vše ve stejném formátu a seřazené, je to už snadné. V současné době jsou v kurzu SQL dartabáze. Takže pokud se chceš uplatnit, tak MS-SQL, Interbase, ORACLE, popř. nějaké ty internetové jako např. MySQL, PostgreeSQL apod. Každá databáze má vlastní programovací jazyk pro uložené procedury, vlastní datové typy apod.Program, ve kterém budeš vyvíjet soft je opět něco jiného. Ten většinou je univerzální a umí přistupovat k jakékoliv databázi.V současné době, pokud bych začínal, tak bych se orientoval směrem .NET a C#. To opravdu záleží na vašem pohledu na svět - jsem býval v odpojeném táboře. Dal byl jen tam dodávat data do BAL - konec příběhu.


Díky nové technologie, jako je LINQ to SQL a Entity Framework stává trochu více populární, pak je hranice mezi DAL a BAL byly rozmazané trochu. V L2S je především vaše DAL docela pevně spojen s obchodními objekty, jak objektový model má 1-1 mapování do databáze pole.


Stejně jako cokoli ve vývoji softwaru není správná nebo špatná odpověď. Musíte pochopit vaše požadavky a budoucí požadavky se a pracovat odtamtud. Já bych nic víc používat Ferrari na Dakhar rally jako bych Range Rover v den trati. Neexistuje žádný dobrý důvod vzdát zjevné indexy (FKS, atd), při vytváření tabulky. To se nikdy výrazně ovlivnit výkon na to, aby nepotřebné indexy malých tabulek, a to je dobré, aby se první řez, když je vaše mysl v souvislosti s návrhem schématu. Také některé indexy slouží k zabránění duplicity, které mohou být užitečné bez ohledu na velikost tabulky.


Myslím, že správná odpověď na vaši otázku je, že počet záznamů v tabulce by měl mít nic společného s tím, když se vytvořit indexy. Ve scénáři, kde mám více sestav souborů (tedy 1 exe a 5 DLL) budu používat jinou verzi souboru pro každého, ale stejný montážní verzi pro všechny z nich, která vám umožní zjistit, které exe každý dll jít s. <p>pravděpodobně se dostáváte do radostí mysql myisam engine ...</p><p>v rámci mysql (nebo phpmyadmin) použijte příkazy repair table xyz znovu, opakovaně, na každé z vašich tabulek (nebo spíše tabulek souvisejících s vašimi podmínkami, protože to jsou ty, které znějí zkaženě), aby se zjistilo, zda to nic nevyřeší.</p><p>pokud selžou, existuje několik zdokumentovaných řešení:</p><p> <a href="http://www.google.com/search?q=recover+a+corrupt+mysql+database">http://www.google.com/search?q=recover+a+corrupt+mysql+database</a> </p><p>jakmile jsou věci obnoveny, spusťte příkazy optimalizovat tabulku xyz na každé tabulce a poté změňte motor databáze a každou tabulku, aby byla použita innodb. innodb poněkud neuspořádá katalog (zejména pokud upustíte databázi nebo velké tabulky), ale - pokud je kompatibilní s acid - je to o dost méně náchylné k chybám než myisam.</p> Hmm, zni to dost zmatene. Nechapu, proc by tabulka z Wordu nesla zkopcit?! A ta druha tabulka v Excelu je zase co? Tak je v Excelu nebo ve Wordu? Neni to kontingencni tabulka? Zkuste pomalu a srozumitelne popsat o co presne jde a uvedomte si, ze jste jedina kdo vi vsechny informace a musite je predat. Upřímně řečeno, já bych jít s sestavení .NET, jak se zdá být jednodušší řešení a těsněji obsahoval řešení, než zahájit nový proces. Některé z důvodů, proč jsem pocit, že způsob, jakým jsou tyto:


1. S nástrojem příkazového řádku, že jste na trh nový proces. Takže je to zcela samostatný proces ID běh a bude probíhat mimo rozsah a aplikační domény vaší stávající aplikace. Veškerá komunikace mezi aplikací a procesu bude přes hranice procesu a bude muset být provedeno buď s telefonem, jakési sdílené paměti, nebo nějaký jiný přístup, který by mohl být těžkopádný (zejména při řešení otázek).
2. Se zahájením nového procesu, jste v podstatě ztratí kontrolu nad tímto procesem z vaší aplikace. Pokud vaše aplikace zemře nebo se vypne, budete muset tento proces výslovně zabít - jinak budete muset úchyty zůstat otevřené soubory uzamčeny, atd.
3. Včetně sestavení .NET v aplikaci umožňuje vše spustit ve stejném kontextu (obecně), který umožňuje lepší komunikaci mezi složkami, snadnější ladění a odstraňování poruch (obecně), a jediný způsob je řízena.
4. Máte trochu větší kontrolu nad kódu. Zahájení procesu je v podstatě black-box - nemáte ponětí, co se děje uvnitř ní. Je pravda, že se sestavení .NET máte podobný black-box scénář, ale vzhledem k tomu, že je ve stejném procesu, může mít nějaké další vhled do toho, jak jsou hovory byly provedeny, kde jsou výjimky být hozen, atd. V podstatě mít trochu větší vhled do složky s sestavení .NET spíše než zahájit nový proces.


To jsou jen některé myšlenky z vrcholu mé hlavy. Doufám, že to pomůže. Máte-li dotazy, dejte mi vědět a já vám zpracovat mé odpovědi. Hodně štěstí!!