379 Stimmen

MySQL vs. MongoDB 1000 Lesungen

Ich war sehr begeistert von MongoDb und habe es in letzter Zeit getestet. Ich hatte eine Tabelle namens posts in MySQL mit etwa 20 Millionen Datensätzen, die nur auf einem Feld namens "id" indiziert waren.

Ich wollte die Geschwindigkeit mit MongoDB vergleichen und habe einen Test durchgeführt, bei dem 15 Datensätze zufällig aus unseren riesigen Datenbanken abgerufen und gedruckt wurden. Ich habe die Abfrage jeweils etwa 1.000 Mal für mysql und MongoDB ausgeführt und bin überrascht, dass ich keinen großen Geschwindigkeitsunterschied feststellen konnte. Vielleicht ist MongoDB 1,1 Mal schneller. Das ist sehr enttäuschend. Mache ich etwas falsch? Ich weiß, dass meine Tests nicht perfekt sind, aber ist MySQL mit MongoDb gleichauf, wenn es um leseintensive Aufgaben geht?

Anmerkung:

  • Ich habe Dual Core + ( 2 Threads ) i7 cpu und 4GB ram
  • Ich habe 20 Partitionen in MySQL mit jeweils 1 Million Datensätzen

Beispielcode für das Testen von MongoDB

<?php
function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}
$time_taken = 0;
$tries = 100;
// connect
$time_start = microtime_float();

for($i=1;$i<=$tries;$i++)
{
    $m = new Mongo();
    $db = $m->swalif;
    $cursor = $db->posts->find(array('id' => array('$in' => get_15_random_numbers())));
    foreach ($cursor as $obj)
    {
        //echo $obj["thread_title"] . "<br><Br>";
    }
}

$time_end = microtime_float();
$time_taken = $time_taken + ($time_end - $time_start);
echo $time_taken;

function get_15_random_numbers()
{
    $numbers = array();
    for($i=1;$i<=15;$i++)
    {
        $numbers[] = mt_rand(1, 20000000) ;

    }
    return $numbers;
}

?>

Beispielcode zum Testen von MySQL

<?php
function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}
$BASE_PATH = "../src/";
include_once($BASE_PATH  . "classes/forumdb.php");

$time_taken = 0;
$tries = 100;
$time_start = microtime_float();
for($i=1;$i<=$tries;$i++)
{
    $db = new AQLDatabase();
    $sql = "select * from posts_really_big where id in (".implode(',',get_15_random_numbers()).")";
    $result = $db->executeSQL($sql);
    while ($row = mysql_fetch_array($result) )
    {
        //echo $row["thread_title"] . "<br><Br>";
    }
}
$time_end = microtime_float();
$time_taken = $time_taken + ($time_end - $time_start);
echo $time_taken;

function get_15_random_numbers()
{
    $numbers = array();
    for($i=1;$i<=15;$i++)
    {
        $numbers[] = mt_rand(1, 20000000);

    }
    return $numbers;
}
?>

9voto

Jason Hitchings Punkte 637

Hier ist ein wenig Forschung die RDBMS vs. NoSQL anhand von MySQL vs. Mongo untersuchte, waren die Schlussfolgerungen im Einklang mit der Antwort von @Sean Reilly. Kurz gesagt, der Vorteil ergibt sich aus dem Design und nicht aus einem bloßen Geschwindigkeitsunterschied. Schlussfolgerung auf Seite 35-36:

RDBMS vs. NoSQL: Vergleich von Leistung und Skalierung

Das Projekt testete, analysierte und verglich die Leistung und Skalierbarkeit der beiden Datenbanktypen. Die durchgeführten Experimente umfassten unterschiedliche Anzahl und Arten von Abfragen, einige komplexer als andere komplexer als andere, um zu analysieren, wie die Datenbanken mit zunehmender Last skalieren. Der wichtigste Faktor war in diesem Fall der verwendete Abfragetyp MongoDB konnte komplexere Abfragen schneller verarbeiten, was vor allem an seinem einfacheren Schemas auf Kosten der Datenduplikation, was bedeutet, dass eine NoSQL-Datenbank große Mengen an Datenduplikaten enthalten kann. Obwohl ein direkt aus dem RDBMS migriertes Schema verwendet werden könnte, würde dies den Vorteil der MongoDB zugrunde liegenden Datendarstellung von Unterdokumenten, die die Verwendung von weniger Abfragen an die Datenbank, da Tabellen kombiniert wurden. Trotz der Leistungssteigerung, die MongoDB gegenüber MySQL bei diesen komplexen Abfragen hatte die MySQL-Abfrage ähnlich wie die komplexe MongoDB-Abfrage modelliert, indem geschachtelten SELECTs modellierte, schnitt MySQL am besten ab, obwohl bei einer höheren Anzahl von Verbindungen verhielten sich die beiden ähnlich. T die komplexe Abfrage, die zwei JOINS und eine Unterabfrage enthält Unterabfrage zeigte den Vorteil von MongoDB gegenüber MySQL aufgrund der Verwendung von Unterdokumenten. Dieser Vorteil kommt bei der was zu einer Vergrößerung der Datenbank führt. Wenn solche Abfragen in einer Anwendung typisch sind, ist es wichtig, NoSQL Datenbanken als Alternativen in Betracht zu ziehen. Kosten für die Speicherung und den Speicherplatz zu berücksichtigen, die durch die größere Datenbankgröße resultieren.

3voto

user1034912 Punkte 2002

Ehrlich gesagt, auch wenn MongoDB langsamer ist, macht MongoDB mich und Sie auf jeden Fall schneller.... und Sie müssen sich keine Gedanken über dumme Tabellenspalten, Zeilen- oder Entitätsmigrationen machen...

Mit MongoDB instanziieren Sie einfach eine Klasse und speichern!

2voto

Fawaz Ahmed Punkte 684

Von der offiziellen MongoDB-Website

Betrachtet man das Abfrageverhalten der beiden Systeme auf hoher Ebene, so stellt man fest, dass MySQL bei der Auswahl einer großen Anzahl von Datensätzen schneller ist, während MongoDB beim Einfügen oder Aktualisieren einer großen Anzahl von Datensätzen deutlich schneller ist.

Referenz

-6voto

zhuomin chen Punkte 45

Auf einem einzelnen Server wäre MongoDb beim Lesen und Schreiben nicht schneller als mysql MyISAM, wenn die Tabellen-/Dokumentengrößen Größen von 1 GB bis 20 GB sind.
MonoDB wird bei Parallel Reduce auf Multi-Node-Clustern schneller sein, während Mysql NICHT horizontal skalieren kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X