MySQL vs MongoDB 1000 lần đọc


321

Tôi đã rất hào hứng với MongoDb và đã thử nghiệm nó gần đây. Tôi đã có một bảng được gọi là các bài đăng trong MySQL với khoảng 20 triệu bản ghi chỉ được lập chỉ mục trên một trường có tên là 'id'.

Tôi muốn so sánh tốc độ với MongoDB và tôi đã chạy thử nghiệm có thể lấy và in 15 bản ghi ngẫu nhiên từ cơ sở dữ liệu khổng lồ của chúng tôi. Tôi đã chạy truy vấn khoảng 1.000 lần mỗi lần cho mysql và MongoDB và tôi cho rằng tôi không nhận thấy nhiều sự khác biệt về tốc độ. Có thể MongoDB nhanh hơn 1,1 lần. Điều đó thật đáng thất vọng. Có điều gì tôi đang làm sai? Tôi biết rằng các bài kiểm tra của tôi không hoàn hảo nhưng MySQL ngang bằng với MongoDb khi đọc các công việc chuyên sâu.


Ghi chú:

  • Tôi có lõi kép + (2 luồng) i7 cpu và 4GB ram
  • Tôi có 20 phân vùng trên MySQL mỗi 1 triệu bản ghi

Mã mẫu được sử dụng để kiểm tra 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;
}

?>


Mã mẫu để kiểm tra 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;
}
?>

11
Thời gian thực tế là gì?
Abe Petrillo

30
Tôi không phải là một DBA nên đây là một nhận xét không phải là một câu trả lời, nhưng tốc độ không phải là sự cân nhắc chính khi lựa chọn giữa MySQL và MongoDB. Những thứ như lược đồ so với lược đồ (nghĩa là lược đồ dữ liệu của bạn cần thay đổi thường xuyên như thế nào) và thu nhỏ kích thước (nghĩa là việc dễ dàng bảo vệ dữ liệu của bạn sao cho việc đọc thông thường yêu cầu dữ liệu từ chỉ một máy chủ) là quan trọng hơn cho sự lựa chọn như thế này.
rossdavidh

17
Làm thế nào nó có thể nhanh hơn trong việc đọc? Nó đọc từ một thiết bị cơ khí. Tương tự như MySQL. Nó phụ thuộc vào tốc độ của chính thiết bị, bạn không thể sử dụng một số phép thuật kỳ lạ thông qua mã để phá vỡ giới hạn của phần cứng.
NB

7
Câu hỏi này chỉ khiến tôi nhớ về điều này: mongodb-is-web-scale.com
oligofren

13
Mọi người lầm tưởng rằng họ cảm thấy như họ sẽ đi với người này hay người khác. Bạn sẽ cần cả lò vi sóng và lò nướng trong nhà bếp của bạn. Bạn chỉ không thể nói tôi sẽ chỉ sử dụng cái này hay cái khác. Trường hợp sử dụng cho cả hai hệ thống là khác nhau. Nếu bạn cần ACID cho một phần của ứng dụng, thì hãy sử dụng RDBMS, nếu không quan tâm đến tính nhất quán và các ràng buộc và các thực thể của bạn có thể được lưu trữ như tất cả trong một (bộ sưu tập), sau đó sử dụng MongoDB. Bạn sẽ kết thúc bằng cách sử dụng một hệ thống kết hợp, điểm quan trọng là quyết định những gì sẽ lưu trữ ở đâu.
Teoman shipahi 04/03/2015

Câu trả lời:


647

MongoDB không nhanh hơn một cách kỳ diệu. Nếu bạn lưu trữ cùng một dữ liệu, về cơ bản theo cùng một kiểu và truy cập chính xác theo cùng một cách, thì bạn thực sự không nên mong đợi kết quả của mình sẽ khác biệt nhiều. Xét cho cùng, MySQL và MongoDB đều là GPL, vì vậy nếu Mongo có mã IO tốt hơn một cách kỳ diệu, thì nhóm MySQL chỉ có thể kết hợp nó vào cơ sở mã của họ.

Mọi người đang thấy hiệu suất MongoDB trong thế giới thực phần lớn vì MongoDB cho phép bạn truy vấn theo cách khác hợp lý hơn với khối lượng công việc của bạn.

Ví dụ, hãy xem xét một thiết kế tồn tại nhiều thông tin về một thực thể phức tạp theo kiểu chuẩn hóa. Điều này có thể dễ dàng sử dụng hàng tá bảng trong MySQL (hoặc bất kỳ db quan hệ nào) để lưu trữ dữ liệu ở dạng bình thường, với nhiều chỉ mục cần thiết để đảm bảo tính toàn vẹn quan hệ giữa các bảng.

Bây giờ hãy xem xét thiết kế tương tự với một cửa hàng tài liệu. Nếu tất cả các bảng có liên quan đó phụ thuộc vào bảng chính (và chúng thường là), thì bạn có thể mô hình hóa dữ liệu sao cho toàn bộ thực thể được lưu trữ trong một tài liệu. Trong MongoDB, bạn có thể lưu trữ tài liệu này dưới dạng một tài liệu, trong một bộ sưu tập. Đây là nơi MongoDB bắt đầu cho phép hiệu năng vượt trội.

Trong MongoDB, để truy xuất toàn bộ thực thể, bạn phải thực hiện:

  • Một chỉ mục tra cứu trên bộ sưu tập (giả sử thực thể được tìm nạp theo id)
  • Truy xuất nội dung của một trang cơ sở dữ liệu (tài liệu nhị phân thực tế)

Vì vậy, một tra cứu cây b, và một trang nhị phân đọc. Nhật ký (n) + 1 IO. Nếu các chỉ mục có thể nằm hoàn toàn trong bộ nhớ, thì 1 IO.

Trong MySQL với 20 bảng, bạn phải thực hiện:

  • Một chỉ mục tra cứu trên bảng gốc (một lần nữa, giả sử thực thể được tìm nạp theo id)
  • Với một chỉ mục được nhóm, chúng ta có thể giả sử rằng các giá trị cho hàng gốc nằm trong chỉ mục
  • Hơn 20 lần tra cứu phạm vi (hy vọng vào một chỉ mục) cho giá trị pk của thực thể
  • Đây có thể không phải là các chỉ mục được nhóm, do đó, cùng hơn 20 lần tra cứu dữ liệu một khi chúng ta tìm ra các hàng con thích hợp là gì.

Vì vậy, tổng số cho mysql, thậm chí giả sử rằng tất cả các chỉ mục đều nằm trong bộ nhớ (khó hơn vì có gấp 20 lần chúng) là khoảng 20 lần tra cứu.

Các tra cứu phạm vi này có thể bao gồm IO ngẫu nhiên - các bảng khác nhau chắc chắn sẽ nằm ở các vị trí khác nhau trên đĩa và có thể các hàng khác nhau trong cùng một phạm vi trong cùng một bảng cho một thực thể có thể không liền nhau (tùy thuộc vào cách thực thể đã được thực hiện cập nhật, v.v.)

Vì vậy, trong ví dụ này, kiểm đếm cuối cùng gấp khoảng 20 lần IO với MySQL trên mỗi lần truy cập logic, so với MongoDB.

Đây là cách MongoDB có thể tăng hiệu suất trong một số trường hợp sử dụng .


43
Điều gì xảy ra nếu chúng ta chỉ đặt một bảng chính trong mysql?
ariso

99
@ariso: Đây là tối ưu hóa bằng cách không chuẩn hóa. Nó có thể cung cấp một hiệu suất tăng. Tuy nhiên, nếu bạn làm điều này, thì bạn sẽ vứt bỏ thiết kế sạch sẽ của mình và tất cả sức mạnh (chưa kể hầu hết các tính năng) của cơ sở dữ liệu quan hệ. Và nó chỉ thực sự hoạt động cho đến khi bạn đạt giới hạn cột.
Sean Reilly

7
@SeanReilly Ví dụ của bạn với các thực thể (nên được chỉnh sửa bằng các đối tượng, không có lập trình hướng thực thể :)) không hợp lệ. Giống như ariso đã nói, bạn có thể tuần tự hóa một đối tượng và lưu trữ nó trong db và giải tuần tự hóa khi cần (bất kỳ hình thức tuần tự hóa nào). Sức mạnh thực sự của các đối tượng bền bỉ được giữ trong các hệ thống db không phải là documnet. Nhưng tôi đồng ý rằng mỗi cái đều có mục đích riêng và những điểm mạnh (nhưng ví dụ của bạn làm khó hiểu hơn tầm nhìn và sự liên quan của chủ đề này).
Geo C.

9
20 tham gia, tôi có thể nói, rất có thể không phải là truy vấn tốt nhất trên lược đồ cơ sở dữ liệu tốt nhất có thể có.
Audrius Meskauskas

8
@SeanReilly Tôi thấy ví dụ của bạn rất hữu ích. Bạn có thể xây dựng một giao diện đặc biệt cho MySQL để tự động tuần tự hóa và giải tuần tự hóa các đối tượng thành các bảng và hành xử theo cách mongodb. Nhưng sau đó, tại sao không sử dụng một cái gì đó được thiết kế đặc biệt để được sử dụng theo cách đó? Ngoài ra việc bạn sử dụng "thực thể" có ý nghĩa. Vấn đề là bạn đang tổ chức dữ liệu dưới dạng tài liệu chứ không phải là các trường trong bảng. Việc tài liệu có phải là một đối tượng được sáng tác bằng ngôn ngữ OO hay không không liên quan đến ví dụ.
BHS

57

Bạn có đồng thời, tức là người dùng đồng thời? Nếu bạn chỉ chạy 1000 lần truy vấn thẳng, chỉ với một luồng, sẽ gần như không có sự khác biệt. Quá dễ dàng cho các động cơ này :)

NHƯNG Tôi khuyên bạn nên xây dựng một phiên kiểm tra tải thực sự, có nghĩa là sử dụng một trình tiêm như JMeter với 10, 20 hoặc 50 người dùng TẠI THỜI GIAN để bạn thực sự thấy sự khác biệt (hãy thử nhúng mã này vào trang web JMeter có thể truy vấn).

Tôi mới làm điều đó hôm nay trên một máy chủ duy nhất (và một bộ sưu tập / bảng đơn giản) và kết quả khá thú vị và đáng ngạc nhiên (MongoDb thực sự nhanh hơn về ghi & đọc, so với công cụ MyISAM và công cụ InnoDb).

Đây thực sự là một phần trong bài kiểm tra của bạn: công cụ tương tranh & MySQL. Sau đó, dữ liệu / thiết kế lược đồ và nhu cầu ứng dụng tất nhiên là những yêu cầu rất lớn, vượt quá thời gian đáp ứng. Hãy cho tôi biết khi bạn nhận được kết quả, tôi cũng cần đầu vào về điều này!


42
Bạn có thể chia sẻ kết quả của bạn?
Imran Omar Bukhsh

1
Ya, kết quả trên đó sẽ rất hữu ích
Vasil Popov

3
Chắc chắn điều này sẽ chỉ mở rộng ... nếu đó là Táo cho Táo như họ đã nói trong phần còn lại của chủ đề này. Vì vậy, nếu trên avg nó thực hiện x, bây giờ mô phỏng từ nhiều nguồn, vui lòng giải thích tại sao mongo sẽ nhanh hơn. tức là chỉ cần nói vì thỏa thuận vì mysql đã hoạt động nhanh hơn cho một yêu cầu duy nhất ... tại sao mongo bây giờ trở nên nhanh hơn cho nhiều người? Tôi không thấy điều này rất khoa học. Tôi nói rằng bài kiểm tra là hợp lệ .. nhưng không chắc chắn về sự khác biệt sẽ lớn như thế nào nếu bạn so sánh Táo với Táo như phần còn lại của chủ đề giải thích.
Seabizkit

35

Nguồn: https://github.com/webcaetano/mongo-mysql

10 hàng

mysql insert: 1702ms
mysql select: 11ms

mongo insert: 47ms
mongo select: 12ms

100 hàng

mysql insert: 8171ms
mysql select: 10ms

mongo insert: 167ms
mongo select: 60ms

1000 hàng

mysql insert: 94813ms (1.58 minutes)
mysql select: 13ms

mongo insert: 1013ms
mongo select: 677ms

10.000 hàng

mysql insert: 924695ms (15.41 minutes)
mysql select: 144ms

mongo insert: 9956ms (9.95 seconds)
mongo select: 4539ms (4.539 seconds)

91
15 phút để chèn 10.000 hàng? Đó là một cơ sở dữ liệu MySQL rất thiếu máu. Theo kinh nghiệm của tôi, nếu hoạt động như vậy đạt thời lượng 1 giây, điện thoại của tôi sẽ sáng lên với các khiếu nại. :)
Mordechai

1
Xtreme Biker hãy xem liên kết. Tôi đã đăng bài kiểm tra từ những người khác với các cài đặt khác.
dùng2081518

14
Một vài điểm: 1) Mysql cần được tối ưu hóa và cấu hình đúng cách, có rất nhiều cách khác nhau để chèn một lượng lớn dữ liệu và thực hiện đúng cách, nó có thể mất 0,1% trong 15 phút, xem trang này chẳng hạn. 2) MongoDB không ghi dữ liệu vào đĩa ngay lập tức, đó là lý do tại sao nó "trông" nhanh hơn, nhưng nếu máy tính của bạn gặp sự cố, dữ liệu sẽ bị mất. 3) Đọc nhanh hơn nhiều trong MySQL
elipoultorak

81
15 phút cho 10.000 hàng? Bạn gõ từng hàng? =))))
Iurie Manea

7
Bất cứ ai tin rằng một tuyên bố rằng phải mất 1,7 giây để chèn mười hàng vào mysql xứng đáng với nỗi đau mà họ nhận được từ mongo
John Haugeland

20

man ,,, câu trả lời là về cơ bản bạn đang kiểm tra PHP chứ không phải cơ sở dữ liệu.

đừng bận tâm lặp lại kết quả, cho dù bình luận ra bản in hay không. có một đoạn thời gian

   foreach ($cursor as $obj)
    {
        //echo $obj["thread_title"] . "<br><Br>";
    }

trong khi phần còn lại dành để thu thập một loạt các số rand.

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

    }
    return $numbers;
}

sau đó có một sự khác biệt lớn b / w nổ và trong.

và cuối cùng những gì đang diễn ra ở đây. trông giống như tạo một kết nối mỗi lần, do đó, nó kiểm tra thời gian kết nối cộng với thời gian truy vấn.

$m = new Mongo();

đấu với

$db = new AQLDatabase();

do đó, nhanh hơn 101% của bạn có thể nhanh hơn 1000% cho truy vấn cơ bản bị tước nhạc jazz.

ôi.


4
một cách tự nhiên, thực hành mã hóa có thể tạo ra sự khác biệt lớn trong mọi tình huống, nhưng điều này không cụ thể đối với bất kỳ loại ngôn ngữ, api hoặc phần mở rộng nào. tạo các số ngẫu nhiên trước khi bắt đầu bộ đếm thời gian sẽ tạo ra sự khác biệt, nhưng phần lớn thời gian trong quy trình không còn nghi ngờ gì nữa từ các giao dịch cơ sở dữ liệu. tạo số ngẫu nhiên là tầm thường, cơ sở dữ liệu SQL và NoQuery thì không.
JSON

1
không chọn số rand. rõ ràng bạn đã bỏ lỡ kết nối tạo mỗi lần. tất cả các vấn đề cộng lại để kiểm tra một cái gì đó ngoài dự định.
Cầu vồng Gabe

2
Không, đã không bỏ lỡ nó. MySQL sẽ không đóng kết nối cho đến khi tập lệnh kết thúc trừ khi mysqli_close () được gọi. Mặt khác, các cuộc gọi lặp lại tới mysqli_connect () sẽ chỉ lấy tài nguyên mysql hiện có từ bảng tài nguyên hiện tại, thay vì cam kết một thủ tục kết nối mới. Tôi không chắc chắn chính xác đối tượng AQLDatabase là gì, nhưng nếu nó sử dụng lib mys mys (mà nó có khả năng) thì nó sẽ có hành vi tương tự. Tiện ích mở rộng MongoDB sử dụng nhóm kết nối, do đó, điều cơ bản tương tự xảy ra khi tạo một 'kết nối' mongodb nhiều lần trong một tập lệnh.
JSON

Tôi đồng ý rằng điểm chuẩn của anh ta có thể được thực hiện khác nhau, nhưng nó phản ánh kết quả cơ bản giống như các băng ghế MySQL và Mongo khác mà tôi đã thấy. Mongo thường nhanh hơn khi chèn (nhanh hơn nhiều đối với các thao tác chèn đơn giản hơn) và MySQL thường nhanh hơn khi chọn.
JSON

thừa nhận, tôi đã quá chắc chắn; đó là chuỗi kết nối chuỗi html của "<br>" thực sự đã khiến tôi phát điên. bạn không cần in đẹp trong các bài kiểm tra. thậm chí lặp đi lặp lại nó có vẻ giống như một bài kiểm tra php và không phải là một bài kiểm tra cơ sở dữ liệu. nói chung, khoảnh khắc AQLDatabase 'có thể / có thể' ... nhiều thành phần hơn có nghĩa là nhiều ẩn số hơn.
Cầu vồng Gabe

17

https://github.com/reoxey/benchmark

điểm chuẩn

so sánh tốc độ của MySQL & MongoDB trong GOLANG1.6 & PHP5

Hệ thống được sử dụng cho điểm chuẩn: DELL cpu i5 thế hệ thứ 4 1.70Ghz * 4 ram 4GB GPU ram 2GB

So sánh tốc độ của RDBMS so với NoQuery đối với INSERT, CHỌN, CẬP NHẬT, XÓA thực hiện số lượng hàng khác nhau 10,100,1000,10000,100000,1000000

Ngôn ngữ được sử dụng để thực thi là: PHP5 & Google ngôn ngữ nhanh nhất GO 1.6

________________________________________________
GOLANG with MySQL (engine = MyISAM)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            INSERT
------------------------------------------------
num of rows             time taken
------------------------------------------------
10                      1.195444ms
100                     6.075053ms
1000                    47.439699ms
10000                   483.999809ms
100000                  4.707089053s
1000000                 49.067407174s


            SELECT
------------------------------------------------
num of rows             time taken
------------------------------------------------
1000000                 872.709µs


        SELECT & DISPLAY
------------------------------------------------
num of rows             time taken
------------------------------------------------
1000000                 20.717354746s


            UPDATE
------------------------------------------------
num of rows             time taken
------------------------------------------------
1000000                 2.309209968s
100000                  257.411502ms
10000                   26.73954ms
1000                    3.483926ms
100                     915.17µs
10                      650.166µs


            DELETE
------------------------------------------------
num of rows             time taken
------------------------------------------------
1000000                 6.065949ms
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


________________________________________________
GOLANG with MongoDB
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            INSERT
------------------------------------------------
num of rows             time taken
------------------------------------------------
10                      2.067094ms
100                     8.841597ms
1000                    106.491732ms
10000                   998.225023ms
100000                  8.98172825s
1000000                 1m 29.63203158s


            SELECT
------------------------------------------------
num of rows             time taken
------------------------------------------------
1000000                 5.251337439s


        FIND & DISPLAY (with index declared)
------------------------------------------------
num of rows             time taken
------------------------------------------------
1000000                 21.540603252s


            UPDATE
------------------------------------------------
num of rows             time taken
------------------------------------------------
1                       1.330954ms
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

________________________________________________
PHP5 with MySQL (engine = MyISAM)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            INSERT
------------------------------------------------
num of rows             time taken
------------------------------------------------
 10                     0.0040680000000001s
 100                    0.011595s
 1000                   0.049718s
 10000                  0.457164s
 100000                 4s
 1000000                42s


            SELECT
------------------------------------------------
num of rows             time taken
------------------------------------------------
 1000000                <1s


            SELECT & DISPLAY
------------------------------------------------
num of rows             time taken
------------------------------------------------
  1000000               20s
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

________________________________________________
PHP5 with MongoDB 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            INSERT
------------------------------------------------
num of rows             time taken
------------------------------------------------
10                      0.065744s
100                     0.190966s
1000                    0.2163s
10000                   1s
100000                  8s
1000000                 78s


            FIND
------------------------------------------------
num of rows             time taken
------------------------------------------------
1000000                 <1s


            FIND & DISPLAY
------------------------------------------------
num of rows             time taken
------------------------------------------------
1000000                 7s


            UPDATE
------------------------------------------------
num of rows             time taken
------------------------------------------------
1000000                 9s

myisam không phải là innodb, cũng là phiên bản mongodb và công cụ lưu trữ?

1
điều quan trọng là chỉ định phiên bản MySQL và MongoDB.
Miron

1
Đừng sử dụng MyISAM. Đừng sử dụng chèn hàng loạt!
Rick James

MySQL nhanh hơn Mongodb trong Chèn truy vấn?! điều đó dường như không đúng cho đến khi mysql cần chuẩn bị các cột và chức năng chạy lại. mysql select nhanh hơn mongodb select, nhưng trong truy vấn chèn, mongo nhanh hơn
Exind

6

Đây là một nghiên cứu nhỏ khám phá RDBMS vs NoQuery bằng cách sử dụng MySQL vs Mongo, các kết luận là phù hợp với phản hồi của @Sean Reilly. Nói tóm lại, lợi ích đến từ thiết kế, không phải là một số khác biệt về tốc độ. Kết luận ở trang 35-36:

RDBMS vs NoQuery: So sánh hiệu năng và tỷ lệ

Dự án đã thử nghiệm, phân tích và so sánh hiệu suất và khả năng mở rộng của hai loại cơ sở dữ liệu. Các thử nghiệm được thực hiện bao gồm chạy các số lượng và loại truy vấn khác nhau, một số phức tạp hơn các truy vấn khác, để phân tích cách thức cơ sở dữ liệu mở rộng với tải tăng. Yếu tố quan trọng nhất trong trường hợp này là loại truy vấn được sử dụng vì MongoDB có thể xử lý các truy vấn phức tạp nhanh hơn do chủ yếu là lược đồ đơn giản hơn với sự hy sinh sao chép dữ liệu có nghĩa là cơ sở dữ liệu NoQuery có thể chứa một lượng lớn dữ liệu trùng lặp. Mặc dù một lược đồ được di chuyển trực tiếp từ RDBMS có thể được sử dụng, nhưng điều này sẽ loại bỏ lợi thế của biểu diễn dữ liệu cơ bản của MongoDB cho phép sử dụng ít truy vấn hơn vào cơ sở dữ liệu khi các bảng được kết hợp.Mặc dù đạt được hiệu năng mà MongoDB đã vượt qua MySQL trong các truy vấn phức tạp này, khi điểm chuẩn mô hình hóa truy vấn MySQL tương tự như truy vấn phức tạp MongoDB bằng cách sử dụng CHỌN lồng nhau, MySQL thực hiện tốt nhất mặc dù ở số lượng kết nối cao hơn, hai kết nối tương tự nhau. Loại truy vấn cuối cùng được điểm chuẩn là truy vấn phức tạp chứa hai THAM GIA và một truy vấn con cho thấy lợi thế MongoDB có trên MySQL do sử dụng các bản đồ con. Ưu điểm này có chi phí sao chép dữ liệu gây ra sự gia tăng kích thước cơ sở dữ liệu. Nếu các truy vấn như vậy là điển hình trong một ứng dụng thì điều quan trọng là phải xem cơ sở dữ liệu NoQuery là lựa chọn thay thế trong khi tính đến chi phí lưu trữ và kích thước bộ nhớ do kích thước cơ sở dữ liệu lớn hơn.


-6

Trên Máy chủ Đơn, MongoDb sẽ không nhanh hơn mysql MyISAM trên cả đọc và ghi, kích thước bảng / tài liệu đã cho là nhỏ từ 1 GB đến 20 GB.
MonoDB sẽ nhanh hơn trên Parallel Giảm trên các cụm Multi-Node, trong đó Mysql KHÔNG thể mở rộng theo chiều ngang.


5
Bạn có thể cung cấp một số bằng chứng hoặc chi tiết hơn để sao lưu điều đó?
Steve Westbrook

Không thể quy mô theo chiều ngang? Thế còn NDB? DRBD ủng hộ MySQL?
Ernestas

Đây không phải là sự thật. MongoDB có giới hạn tài liệu 16MD. Mysql có thể có nhiều hơn nữa nếu bạn thích
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.