skalierbarkeitsbeschränkungen von postgresql und mysql
<p>ich habe gehört, dass die leistung von nicht gesplardeten relationalen datenbanken wie mysql oder postgresql über 10 tb hinaus "bricht".</p><p>ich vermute, dass es solche grenzwerte gibt, da man sich netezza, greenplum oder vertica usw. nicht einfallen lassen würde. ich möchte jedoch fragen, ob hier jemand einen verweis auf ein forschungspapier oder formale fallstudien hat, in denen diese grenzwerte quantifiziert werden.</p>
<p>es gibt keine einfache antwort auf ihre frage, aber hier sind einige dinge, über die sie nachdenken sollten.</p><p>erstens ist die skalierung nicht das einzige, worüber man sich sorgen machen muss. was sie mit ihren daten machen, ist. wenn sie 500 tabellen mit 30 tb daten) haben und einfach oltp mit sehr wenig berichterstellung) arbeiten, werden sie wahrscheinlich nicht zu viele probleme haben es gibt 32-tb-datenbanken auf postgresql. gleichzeitig wird sich die leistung jedoch etwas verschlechtern, da die festplatte auf alles übertragen werden muss. wenn sie über 50 tb daten verfügen, aber häufig einen treffer von etwa 100 gb haben, können sie dies auch erstellen sie einen server mit genügend ram, um diesen teil der datenbank im speicher zu halten, und sie sind golden.</p><p>wenn sie jedoch versuchen, den modus (häufigster wert) aus 1 tb daten zu entfernen, spielt es keine rolle, welches system sie verwenden. dies wird <em> schmerzhaft sein </em> mit oder ohne scherben. (bearbeiten: sharding kann dieses problem <em> tatsächlich verschlimmern. </em>)</p><p>die hauptprobleme, auf die sie mit riesigen datenbanken unter mysql und postgresql stoßen werden, sind die tatsache, dass keine der beiden parallelen zwischen abfragen unterstützt. mit anderen worten, eine abfrage wird von einem einzelnen thread als einzelner block ausgeführt und kann nicht in teile zerlegt und separat ausgeführt werden. dies ist meistens ein problem, wenn große analytische abfragen über große datenmengen ausgeführt werden. hier kommen postgres-xc und green plum zur rettung, da sie speicher von ausführung trennen und dies auf koordinatorebene tun können. beachten sie, dass postgres-xc und green plum im wesentlichen intern sharding verwenden, die koordinatoren jedoch die gesamte konsistenz global erzwingen.</p><p>mit intraquery-parallelität können sie die abfrage aufteilen, verschiedene prozessoren/festplatten-e/a-kanäle teile davon ausführen lassen und teile der ergebnismenge zurückmelden, die zusammengestellt und an die anwendung zurückgegeben werden sollen. auch dies ist normalerweise am hilfreichsten bei analytischen und nicht bei transaktionsverarbeitungslasten.</p><p>die zweite sache ist, dass einige systeme wie vertica oder greenplum informationsspalten zusammen speichern. dies erschwert die verwendung des systems aus der perspektive von oltp] und verringert die leistung dort, erhöht jedoch die leistung für große analytische workloads drastisch. dies ist also ein workload-spezifischer kompromiss.</p><p>die antwort ist also, dass sie <em>, sobald sie über 1-2 tb in der größe) </em> stehen, möglicherweise mit einer zahl konfrontiert werden dies ist wiederum spezifisch für datenbanken, größe der arbeitssätze usw. an diesem punkt müssen sie sich jedoch wirklich für schneeflockensysteme entscheiden, dh solche, die einzigartig und auf ihre arbeitslast zugeschnitten sind.</p><p>dies bedeutet natürlich, dass die grenzwerte im allgemeinen nicht quantifizierbar sind.</p><p><strong>bearbeiten</strong>: ich habe jetzt mit einer 9-tb-datenbank gearbeitet, die eine mischung aus entscheidungsunterstützung und transaktionsverarbeitungs-workloads in postgresql verarbeitet. die größte herausforderung besteht darin, dass sie bei fragen, die große teile des datensatzes betreffen, eine weile auf die antwort warten müssen.</p><p>bei sorgfältiger beachtung der grundlagen (einschließlich indizes, autovakuum, funktionsweise auf niedrigem niveau usw.) und ausreichender rechenressourcen sind diese jedoch vollständig verwaltbar (und ich schätze, dass sie bis weit in den 30-tb-bereich in pg verwaltbar sind).</p><p><strong>edit2</strong>: sobald sie 100 tb erreicht haben, hängt es von ihrem datensatz ab, was funktioniert. ich arbeite gerade an einem, der nicht in diesen bereich skaliert, da er zuerst das limit von 32 tb pro tabelle in postgresql erreicht.</p>
da hat dir jemand schauermärchen über externe festplatten aufgetischt. alle kleineren, externen (2,5 zoll) festplatten (egal ob mechanisch oder SSD) werden ausschließlich über den usb-port mit strom versorgt.


große 3,5 zoll platten in großen gehäusen erfordern für ihren betrieb mehr power, als usb liefern kann, daher haben diese eine eigene stromversorgung.


beides hat aber nichts mit der daten-verbindung zu tun. sie ist ständig aktiv, kann sich aber bei "nichtgebrauch" im latenten standby-betrieb befinden, ohne dass es deinen rechner, bzw. die konsole oder ein spiel stört. falls das spiel (oder das programm) das nachladen von daten erfordert, sollte eine leistungsfähige konsole oder ein moderner pc/notebook das ohne unterbrechung der laufenden anwendung im hintergrund erledigen.


bei einem pc ist es sogar empfehlenswert, trotz "plug & play" funktion, die externe festplatte vor dem abstöpseln datenmäßig zu trennen, weil ggf. trotz standby ein paar bytes verloren gehen können. Es lohnt sich, einen Blick auf diesen [`Blog Post`](http://lostechies.com/jimmybogard/2012/07/20/choosing-an-orm-strategy/) werfen, aber letztendlich werden die Kriterien von Ihnen festgelegt. Sie müssen entscheiden, ob 

* schnelle Entwicklung
* Performance
* Code-zuerst
* DB zuerst

 oder was auch immer Sie suchen und priorisieren Sie die Liste basierend auf, was noch wichtiger ist. Dann verwenden Sie diese Liste, um Ihre Forschung zusammenzustellen. Ähm Du sollst eine Wertetabelle machen. D.h. für x Sachen im Bereich von -5 bis 1 einsetzen und dazu die y-Koordinate berechnen. Die Punkte aus x und y Koordinaten dann in ein Koordinatensystem einzeichnen.


Was kannst du daran nicht? Hier eine Skizze, damit du es dir vorstellen kannst

![blob.png](https://www.mathelounge.de/?qa=blob&qa_blobid=4970608801118703028) Ich sehe nicht, wie Sie schneller als mit SqlBulkCopy ausführen können. Auf unserem Projekt können wir 250K Zeilen in ungefähr 3 Minuten importieren, also scheint Ihre Rate ungefähr richtig zu sein. 

 Ich denke nicht, dass es parallel dazu helfen würde, selbst wenn es technisch möglich wäre. Wir führen nur jeweils einen Import aus, ansonsten beginnt SQL Azure damit, unsere Anforderungen zu terminieren. 

 In der Tat ist es manchmal nicht möglich, eine große Group-by-Abfrage gleichzeitig mit dem Import auszuführen. SQL Azure führt eine Menge Arbeit aus, um die Servicequalität zu gewährleisten. Dazu gehört auch das Zeitlimit für Anforderungen, die zu lange dauern, zu viele Ressourcen usw 

 Wenn Sie also mehrere große Masseneinsätze zur selben Zeit machen, werden Sie *wahrscheinlich* eine Auszeit haben. Ein reg-ex wird viel schneller sein als html agility pack. 

 Aber Sie sollten bedenken, dass HTML nicht immer gut geformt sein muss. Die Suche nach den richtigen Daten, die Sie nur mit reg-ex verwenden möchten, kann fehlschlagen. Browser sind sehr fehlerverzeihend. 

 Agility Pack ist ein großartiges Werkzeug. Es bietet eine Menge Funktionen für den Speicher, den es verbraucht. <p>sie können das meiste davon tun, indem sie eine login.sql verwenden. login.sql wird während der - überraschenden - anmeldung ausgeführt und aus ihrem sqlpath oder dem aktuellen verzeichnis geladen. für die beispiele, die sie gegeben haben, haben sie wirklich den schlimmsten fall gewählt.</p><p>problem ist der sqlterminator. was auch immer sie dort eingeben, der schrägstrich wird als kostenloser sql-minator beibehalten. daneben sucht sqlplus zuerst nach dem sqlterminator und führt dies vor dem scannen zum string-terminator durch. ein fehler, wenn sie mich fragen. der schrägstrich kann in einer zeichenfolge verwendet werden, solange er nicht allein in einer separaten zeile steht. sobald sqlplus das als sqlterminator angegebene zeichen findet, ignoriert es alles andere und hört auf zu lesen.</p><p>der schrägstrich kann behandelt werden, solange er nicht alleine in einer zeile steht.</p><p>login.sql enthält:</p><pre><code>prompt run login.sql show sqlterminator show sqlblanklines set sqlblanklines on set sqlterminator ';' show sqlterminator show sqlblanklines prompt ready login.sql set echo on </code></pre><p>leigh.sql enthält:</p><pre><code>insert into t1 values ('fail bc semicolon a;a / '); insert into t1 values ('fail bc solo / aa / '); insert into t1 values ('ok / not solo aa /a '); delete from t1 where a = 'c a/ '; </code></pre><p>führen sie das skript aus:</p><pre><code>sqlplus leigh/leigh@orcl @leigh sql*plus: release 10.2.0.4.0 - production on thu aug 9 22:36:20 2012 copyright (c) 1982, 2007, oracle. all rights reserved. connected to: oracle database 11g enterprise edition release 11.2.0.3.0 - 64bit production with the partitioning, real application clusters, automatic storage management, olap, data mining and real application testing options run login.sql sqlterminator ";" (hex 3b) sqlblanklines off sqlterminator ";" (hex 3b) sqlblanklines on ready login.sql sql&gt; insert into t1 values ('fail bc semicolon 2 a;a 3 / error: ora-01756: quoted string not properly terminated sql&gt; '); sp2-0042: unknown command "')" - rest of line ignored. sql&gt; sql&gt; insert into t1 values ('fail bc solo / 2 3 4 aa 5 / error: ora-01756: quoted string not properly terminated sql&gt; '); sp2-0042: unknown command "')" - rest of line ignored. sql&gt; sql&gt; insert into t1 values ('ok / not solo 2 3 4 aa 5 /a 6 '); 1 row created. sql&gt; sql&gt; delete from t1 where a = 'c 2 3 4 a/ 5 '; 0 rows deleted. </code></pre><p>sie müssen nicht mit start-/endblöcken herumspielen. der befehl sqlterminator innerhalb des befehls kann nicht verarbeitet werden, unabhängig davon, wo er sich in einer zeichenfolge befindet oder nicht. er kann keine zeilen mit schrägstrich allein in einer zeile in einer zeichenfolge verarbeiten.</p> Der Fehler liegt auf jeden Fall darin, dass die zweite Funktion (also s\_S(t)) nicht steil genug ist.  

  

Setzt man z.B. testweise den Wert t=10s ein, so müsste sich  

  

s\_S(t=10s) ≈ 96,9 m  

  

ergeben.  

  

In deinem Graph liegt dieser Wert aber zwischen 80 und 90. Folgende Minimal-Ausstattung wird von Microsoft angegeben:  

- Prozessor 1 GHz,  

- RAM 256 MB,  

- freier Platz auf Festplatte 15 GB,  

- Grafik-Karte 32 MB,  

- DirectX9-kompatibel.  

Das ist aber das **absolute Minimum**, bei dem man alle Leistungen auf "minimal" schalten muss.  

Das ist nicht zu empfehlen, denn bei einem guten Computer ist FSX ein faszinierendes Spiel, bei einem zu schwachen Computer aber nicht.  

Leistungsfähige Computer sind heute nicht mehr teurer als früher die schwachen. Wenn man dateisysteme sich ansieht oder sich damit Befasst sollte man sich eher die Frage stellen : Was macht Btrfs besser als z.B. Ext3 ? 


Ext 3 ist heute immer noch das Maß aller Dinge und läst sich auch problemlos auf größeren Partitionen anwenden. Ext 3 ist nichts anderes als ein Ext 2 mit Journalfunktion. 
Wobei hier die Journalfunktion für die Dateioptimerung und auch für das Dateisystem (erhalt) herangezogen werden kann. Das Ext 4 wäre im Privatgebrauch oder Verwendung eher ungeeignet. Gerüchten zu Folge soll btrfs das Ext 3 oder Ext 4 baldigst ablösen ,aber dazu mehr aus der Wikipedia : 


Das btrfs (B-tree FS oder alternativ Butter FS) ist ein Copy-On-Write-Dateisystem, das von der Firma Oracle Corporation seit dem Jahr 2007 für das Betriebssystem Linux entwickelt wird. Möglicherweise soll es in Zukunft das bislang im Linux-Umfeld vorherrschende ext3-Dateisystem mit seinen Beschränkungen (Dateigröße und Gesamtdateisystemgröße) ersetzen. Da dessen direkter Nachfolger ext4 nur einen Teil der Beschränkungen von ext3 beheben kann, setzt Andrew Morton, einer der prominentesten Linux-Kernel-Entwickler, auf längere Sicht auf btrfs. Btrfs befindet sich noch in der Entwicklungsphase (Stand 7/2011: Version 2.6.39 vom Mai 2011, btrfs ist ab Linux Kernel 2.6.31-rc1 enthalten) und ist daher nicht für den Einsatz in Produktionsumgebungen gedacht. Für den experimentellen Betrieb wird das Dateisystem erstmals unter OpenSuse 11.3 unterstützt und es existieren Pakete für die Distributionen Gentoo, Debian und Ubuntu. Ebenfalls wurde Btrfs in die aktuelle Entwicklerversion von Fedora aufgenommen. Es wird als freie Software unter der GNU General Public License (GPL) entwickelt. Am 9. Januar 2009 wurde btrfs erstmals in den Linux Kernel 2.6.29 aufgenommen. Btrfs ist das Standard-Dateisystem von MeeGo, und soll ab der Version 17 auch in Fedora als Standard-Dateisystem verwendet werden.


Quelle: <http://de.wikipedia.org/wiki/Btrfs>


Solange es noch nicht Offizeill zu 100% ausgereift ist und auch zu 100% Fehlerfrei arbeitet ,sollte man Btrfs meiden. Jedenfalls nutze ich es nur äusserst Selten in Testservern im Raid Verbund ( 1,10,5 ,etc.) und dort arbeitet es noch nicht zu 100% Fehlerfrei. Ergo sollte man auf Ext 3 noch bleiben bis Btrfs Fehlerfrei arbeitet.