মাইএসকিউএল বনাম মঙ্গোডিবি 1000 পড়ছে


320

আমি মঙ্গোডিবি সম্পর্কে খুব উচ্ছ্বসিত এবং ইদানীং এটি পরীক্ষা করে দেখছি। আমার কাছে মাইএসকিউএলে পোস্ট নামক একটি টেবিল ছিল যেখানে কেবল 'আইডি' নামক একটি ক্ষেত্রের প্রায় 20 মিলিয়ন রেকর্ড সূচিযুক্ত।

আমি মঙ্গোডিবিয়ের সাথে গতির তুলনা করতে চেয়েছিলাম এবং আমি একটি পরীক্ষা চালিয়েছিলাম যা আমাদের বিশাল ডাটাবেসগুলি থেকে এলোমেলোভাবে 15 টি রেকর্ড মুদ্রণ করে মুদ্রণ করতে পারে। আমি মাইএসকিএল এবং মঙ্গোডিবি-র জন্য প্রায় এক হাজার বার ক্যোয়ারী চালিয়েছি এবং আমি অবাক হয়েছি যে গতির মধ্যে আমি খুব বেশি পার্থক্য লক্ষ্য করি না। হতে পারে মঙ্গোডিবি 1.1 গুণ বেশি দ্রুত। এটা খুব হতাশাজনক। আমি কি কিছু ভুল করছি? আমি জানি যে আমার পরীক্ষাগুলি নিখুঁত নয় তবে মন্টোডিবি'র সমতুল্য মাইএসকিউএল যখন এটি নিবিড় কাজগুলি পড়ার বিষয়টি আসে।


বিঃদ্রঃ:

  • আমার ডুয়াল কোর + (2 থ্রেড) আই 7 সিপিইউ এবং 4 জিবি র‌্যাম রয়েছে
  • আমার 1 মিলিয়ন রেকর্ডের প্রতিটি মাইএসকিউএলে 20 টি পার্টিশন রয়েছে

মংগোডিবি পরীক্ষার জন্য ব্যবহৃত নমুনা কোড

<?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;
}

?>


মাইএসকিউএল পরীক্ষার জন্য নমুনা কোড

<?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
আসল সময় কি?
অ্যাবে পেট্রিলো

30
আমি ডিবিএ নই তাই এটি একটি মন্তব্য নয় উত্তর, তবে মাইএসকিউএল এবং মঙ্গোডিবির মধ্যে নির্বাচন করার সময় গতি প্রধান বিবেচনা হওয়া উচিত নয়। স্কিমহীন বনাম স্কিমা (যেমন আপনার ডেটা স্কিমাটি কতবার পরিবর্তনের প্রয়োজন হয়) এবং আকারে স্কেলিংয়ের মতো বিষয়গুলি (যেমন আপনার ডেটাটি তীক্ষ্ণ করা কতটা সহজ যাতে একটি সাধারণ পাঠকে কেবলমাত্র একটি সার্ভারের ডেটার প্রয়োজন হয়) একটি নির্বাচনের জন্য আরও গুরুত্বপূর্ণ এটার মত.
রসদবিধি

17
এটি পড়ার ক্ষেত্রে কীভাবে দ্রুত হতে পারে? এটি একটি যান্ত্রিক ডিভাইস থেকে পড়ে। মাইএসকিউএল হিসাবে একই। এটি ডিভাইসটির গতির উপর নির্ভর করে, আপনি হার্ডওয়ারের সীমাটি ভাঙ্গতে কোডের মাধ্যমে কিছু অদ্ভুত যাদু ব্যবহার করতে পারবেন না।
এনবি

7
এই প্রশ্নটি আমাকে কেবল এটির স্মরণ করিয়ে দেয়: mongodb-is-web-scale.com
oligofren

13
লোকেদের ভুল হয় যে তারা মনে করে যে তারা একে অপরের সাথে যাবে। আপনার রান্নাঘরে আপনার দুটি মাইক্রোওয়েভ এবং চুলা লাগবে। আপনি কেবল বলতে পারবেন না আমি কেবল এক বা অন্য ব্যবহার করব। উভয় সিস্টেমের ক্ষেত্রে ব্যবহারের ক্ষেত্রে ভিন্ন। আপনার অ্যাপ্লিকেশনের অংশের জন্য যদি আপনার এসিডি দরকার হয়, তবে আরডিবিএমএস ব্যবহার করুন, যদি ধারাবাহিকতা এবং সীমাবদ্ধতাগুলির বিষয়ে চিন্তা না করে এবং আপনার সত্তাগুলি এক (সংগ্রহ) হিসাবে সমস্ত হিসাবে সংরক্ষণ করা যেতে পারে তবে মঙ্গোডিবি ব্যবহার করুন। আপনি একটি হাইব্রিড সিস্টেম ব্যবহার করে শেষ করবেন কী পয়েন্টটি কোথায় সংরক্ষণ করবেন তা সিদ্ধান্ত নিচ্ছে।
তেওমান শিপাহি

উত্তর:


644

মঙ্গোডিবি যাদুকরীভাবে দ্রুত নয়। আপনি যদি একই ডেটাটি মূলত একই ফ্যাশনে সংগঠিত করেন এবং এটিকে ঠিক একইভাবে অ্যাক্সেস করেন তবে আপনার ফলাফলগুলি বাস্তবে অন্যরকম হওয়ার আশা করা উচিত নয়। সর্বোপরি, মাইএসকিউএল এবং মঙ্গোডিবি উভয়ই জিপিএল, সুতরাং যদি মঙ্গোতে এটিতে যাদুগতভাবে আরও ভাল আইও কোড থাকে তবে মাইএসকিউএল দলটি কেবল তাদের কোডবেজে এটি অন্তর্ভুক্ত করতে পারে।

লোকেরা আসল বিশ্ব মোংগোডিবির পারফরম্যান্সটি বেশিরভাগ ক্ষেত্রেই দেখছে কারণ মোংগোডিবি আপনাকে অন্যভাবে জিজ্ঞাসা করতে দেয় যা আপনার কাজের চাপের চেয়ে আরও বোধগম্য।

উদাহরণস্বরূপ, এমন একটি ডিজাইন বিবেচনা করুন যা একটি সাধারণ ফ্যাশনে জটিল সত্তা সম্পর্কে প্রচুর তথ্য অব্যাহত রাখে। এটি সহজেই মাইএসকিউএলে (বা যে কোনও রিলেশনাল ডিবি) সাধারণ আকারে ডেটা সঞ্চয় করতে কয়েক টেবিল ব্যবহার করতে পারে, টেবিলের মধ্যে সম্পর্কের একাত্মতা নিশ্চিত করার জন্য অনেক সূচী প্রয়োজন।

এখন ডকুমেন্ট স্টোরের সাথে একই নকশাটি বিবেচনা করুন। যদি সম্পর্কিত সমস্ত টেবিলগুলি মূল টেবিলের অধীনস্থ হয় (এবং তারা প্রায়শই থাকে) তবে আপনি ডেটা মডেল করতে সক্ষম হতে পারেন যে পুরো সত্তা একটি নথিতে সঞ্চিত থাকে। মঙ্গোডিবিতে আপনি এটিকে একটি একক দস্তাবেজ হিসাবে একক সংগ্রহে সংরক্ষণ করতে পারেন। এখান থেকেই মঙ্গোডিবি উচ্চতর পারফরম্যান্স সক্ষম করতে শুরু করে।

মঙ্গোডিবিতে, পুরো সত্তাটি পুনরুদ্ধার করতে, আপনাকে সম্পাদন করতে হবে:

  • সংগ্রহে একটি সূচক অনুসন্ধান (সত্তা আইডি দ্বারা আনা হয়েছে ধরে নেওয়া)
  • একটি ডাটাবেস পৃষ্ঠার বিষয়বস্তু পুনরুদ্ধার করুন (আসল বাইনারি জসন নথি)

সুতরাং একটি খ-গাছের অনুসন্ধান এবং একটি বাইনারি পৃষ্ঠা পড়ুন। লগ (এন) + 1 আইও। সূচিগুলি যদি সম্পূর্ণরূপে মেমরির মধ্যে থাকতে পারে তবে 1 আইও।

20 টি টেবিল সহ মাইএসকিউএল এ আপনাকে সম্পাদন করতে হবে:

  • রুট টেবিলের জন্য একটি সূচক অনুসন্ধান (আবার, ধরে নেওয়া সত্তা আইডি দ্বারা আনা হয়েছে)
  • একটি ক্লাস্টারড সূচক সহ, আমরা ধরে নিতে পারি যে মূল সারিটির মানগুলি সূচকে রয়েছে
  • সত্তার পিকে মানের জন্য 20+ ব্যাপ্তি অনুসন্ধান (আশা করি কোনও সূচকে থাকা)
  • এগুলি সম্ভবত ক্লাস্টারযুক্ত সূচিগুলি নয়, তাই উপযুক্ত বাচ্চাদের সারিগুলি কী তা আমরা একবার নির্ধারণ করে দিলে একই 20+ ডেটা লুকআপস।

সুতরাং মাইএসকিএল-র জন্য মোট, এমনকি ধরে নেওয়াও যে সমস্ত সূচকগুলি মেমরির মধ্যে রয়েছে (যা আরও শক্তিশালী যেহেতু তাদের মধ্যে 20 গুণ বেশি রয়েছে) প্রায় 20 পরিসরের লকআপ রয়েছে।

এই ব্যাপ্তিগুলির অনুসন্ধানগুলি সম্ভবত এলোমেলো আইও সমন্বিত - বিভিন্ন টেবিলগুলি অবশ্যই ডিস্কের বিভিন্ন স্পটে থাকতে পারে এবং এটি সম্ভব যে কোনও সত্তার জন্য একই টেবিলের একই পরিসরের বিভিন্ন সারি সংশ্লেষিত নাও হতে পারে (সত্তাটি কীভাবে হয়েছে তার উপর নির্ভর করে আপডেট করা ইত্যাদি)।

সুতরাং এই উদাহরণের জন্য, চূড়ান্ত ট্যালিটি মঙ্গোডিবিয়ের তুলনায় লজিক্যাল অ্যাক্সেস প্রতি মাইএসকিউএল সহ প্রায় 20 গুণ বেশি আইও।

কিছু ব্যবহারের ক্ষেত্রে এইভাবেই মঙ্গোডিবি পারফরম্যান্সকে বাড়িয়ে তুলতে পারে


43
যদি আমরা কেবল একটি মূল টেবিলটি মাইএসকিএলে রাখি?
এরিসো

98
@ আরিসো: এটি অস্বীকৃতি দ্বারা অনুকূলিতকরণ। এটি একটি পারফরম্যান্স বুস্ট প্রদান করতে পারে। যাইহোক, আপনি যদি এটি করেন, তবে আপনি নিজের পরিষ্কার ডিজাইন এবং একটি পাওয়ার রিলেশনাল ডাটাবেসের সমস্ত শক্তি (বেশিরভাগ বৈশিষ্ট্য উল্লেখ না করার জন্য) ফেলে দিচ্ছেন। আপনি কলাম সীমা না আঘাত করা এবং এটি কেবল সত্যই কাজ করে।
শান রিলি

7
@ সানরিলি সত্তা সহ আপনার উদাহরণ (বস্তুগুলি দিয়ে সম্পাদনা করা উচিত, কোনও সত্তা ভিত্তিক প্রোগ্রামিং নেই :)) অবৈধ। অ্যারিসো যেমন বলেছিলেন, আপনি কোনও বস্তুকে সিরিয়ালাইজ করতে পারেন এবং এটি ডিবিতে সঞ্চয় করতে পারেন এবং যখন প্রয়োজন হয় (সিরিয়ালাইজেশনের কোনও ফর্ম) তখন ডিজিটালাইজ করতে পারেন। অবিচলিত অবজেক্টের আসল শক্তি ডকুমনেট ডিবি সিস্টেমে নয়, ওডবএমগুলিতে রাখা হয়। তবে আমি সম্মত হই যে প্রত্যেকটির নিজস্ব উদ্দেশ্য এবং স্ট্রিংহটস রয়েছে (তবে আপনার উদাহরণটি এই বিষয়টির আরও দৃষ্টি এবং প্রাসঙ্গিকতাকে প্রশ্রয় দেয়)।
জিও সি

9
আমি যোগ দিয়েছি 20, যোগ দিয়েছি সম্ভবত সম্ভবত সেরা ডাটাবেস স্কিমা সেরা কোয়েরি না।
অড্রিয়াস মেসকাউস্কাস

8
@ সানরিলি আপনার উদাহরণটি আমি খুব সহায়ক বলে মনে করেছি। আপনি মাইএসকিউএলে একটি বিশেষ ইন্টারফেস তৈরি করতে পারেন যা স্বয়ংক্রিয়ভাবে টেবিলগুলিতে বস্তুগুলিকে সিরিয়ালাইজ করে এবং ডিসায়ারাইজ করে এবং মংডোবের মতো আচরণ করে। তবে, কেন কেবল বিশেষভাবে ডিজাইন করা কিছু ব্যবহার না করে সেভাবে ব্যবহার করা যেতে পারে? এছাড়াও আপনার "সত্তা" ব্যবহারটি অর্থবোধ করে। মুল বক্তব্যটি হ'ল আপনি কোনও টেবিলে ক্ষেত্রের পরিবর্তে ডেটা দলিল হিসাবে সজ্জিত করছেন। দস্তাবেজটি কোনও OO ভাষায় রচিত একটি বস্তু কিনা তা উদাহরণের সাথে অপ্রাসঙ্গিক।
বিএইচএস

57

আপনার কি একযোগে অর্থাত্ একযোগে ব্যবহারকারী রয়েছে? আপনি যদি কেবল একটি থ্রেড সহ 1000 বার কোয়েরিটি সরাসরি চালান তবে প্রায় কোনও পার্থক্য থাকবে না। এই ইঞ্জিনগুলির জন্য খুব সহজ :)

তবে আমি দৃ strongly়ভাবে প্রস্তাব দিচ্ছি যে আপনি একটি সত্য লোড টেস্টিং সেশনটি তৈরি করুন, যার অর্থ একই সময়ে 10, 20 বা 50 জন ব্যবহারকারী জেমিটারের মতো ইনজেক্টর ব্যবহার করা যাতে আপনি সত্যিই কোনও পার্থক্য দেখতে পান (একটি ওয়েব পৃষ্ঠার ভিতরে এই কোডটি এম্বেড করার চেষ্টা করুন জে মিটার) জিজ্ঞাসা করতে পারে)।

আমি কেবল এটি আজ একটি একক সার্ভারে করেছি (এবং একটি সাধারণ সংগ্রহ / টেবিল) এবং ফলাফলগুলি বেশ আকর্ষণীয় এবং আশ্চর্যজনক (মাইগ্যামডিবি রাইটিং এন্ড রিডে মাইএসএএম ইঞ্জিন এবং ইনোডিবি ইঞ্জিনের তুলনায় সত্যিই দ্রুত ছিল)।

এটি সত্যিই আপনার পরীক্ষার অংশ হওয়া উচিত: একত্রে এবং মাইএসকিউএল ইঞ্জিন। তারপরে, ডেটা / স্কিমা ডিজাইন এবং অ্যাপ্লিকেশন প্রয়োজনীয়তা অবশ্যই প্রতিক্রিয়ার সময়ের বাইরেও বিশাল প্রয়োজন। আপনি ফলাফল পেতে যখন আমাকে জানতে দিন, আমি এই সম্পর্কে ইনপুট প্রয়োজন!


42
আপনি কি ফলাফল ভাগ করতে পারেন?
ইমরান ওমর বুখশ

1
হ্যাঁ, এর ফলাফলগুলি খুব সহায়ক হবে
ভাসিল পপভ

3
অবশ্যই এটি কেবলমাত্র স্কেল করবে ... এটি যদি অ্যাপল থেকে আপেলদের মতো করে থাকে তবে তারা এই বিষয়ে বাকি অংশে বলে যাচ্ছিল। সুতরাং এটি যদি औसतে এটি এক্স সম্পাদন করে, এখন একাধিক উত্স থেকে অনুকরণ করুন, কেন মঙ্গো দ্রুততর হবে তা ব্যাখ্যা করুন। অর্থাত্ কেবল চুক্তির জন্য বলতে পারি যে একক অনুরোধের জন্য মাইএসকিএল গড়ে দ্রুত ছিল ... কেন মঙ্গো এখন একাধিকের জন্য দ্রুততর হবে? আমি এটি খুব বৈজ্ঞানিক বলে মনে করি না। আমি বলছি পরীক্ষাটি বৈধ ..
Seabizkit

36

সূত্র: https://github.com/webcaetano/mongo-mysql

10 সারি

mysql insert: 1702ms
mysql select: 11ms

mongo insert: 47ms
mongo select: 12ms

100 সারি

mysql insert: 8171ms
mysql select: 10ms

mongo insert: 167ms
mongo select: 60ms

1000 সারি

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

mongo insert: 1013ms
mongo select: 677ms

10.000 সারি

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

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

91
15 মিনিট 10,000 সারি toোকানোর জন্য? এটি একটি খুব রক্তাল্পতা মাইএসকিউএল ডাটাবেস। আমার অভিজ্ঞতায়, যদি এই ধরণের অপারেশন সময়কাল 1 সেকেন্ডের কাছাকাছি আসে, তবে আমার ফোন অভিযোগ সহ আলোকিত হয়। :)
মর্দচাই

1
এক্সট্রিম বাইকার লিঙ্কটি একবার দেখুন। আমি অন্যান্য সেটিংস সহ অন্যান্য লোকের কাছ থেকে পরীক্ষা পোস্ট করেছি।
ব্যবহারকারী 2081518

14
কয়েকটি পয়েন্ট: 1) মাইএসকিউএলকে যথাযথভাবে অনুকূলিতকরণ এবং কনফিগার করা দরকার, প্রচুর পরিমাণে ডেটা সন্নিবেশ করার বিভিন্ন উপায় রয়েছে এবং সঠিকভাবে সম্পন্ন হলে এটি 15 মিনিটের 0.1% নিতে পারে, উদাহরণস্বরূপ এই পৃষ্ঠাটি দেখুন । ২) মঙ্গোডিবি সরাসরি তাত্ক্ষণিকভাবে ডিস্কে ডেটা লিখবে না যার কারণে এটি "দেখায়" দ্রুত হয় তবে আপনার কম্পিউটার ক্রাশ হলে ডেটা নষ্ট হয়ে যায়। 3) মাইএসকিউএলে পঠন অনেক দ্রুত
elipoultorak

81
10.000 সারিগুলির 15 মিনিট? আপনি প্রতিটি সারি টাইপ করেছেন? =))))
আইউরি ম্যানিয়া

6
যে কেউ দাবি করে যে বিশ্বাস করে যে দশ সারিটি মাইএসকিএলে 1.োকাতে ১.7 সেকেন্ড সময় লাগে তারা মঙ্গো থেকে যে ব্যথা পাবে তার প্রাপ্য
জন হাগল্যান্ড

20

মানুষ ,,, উত্তরটি হল আপনি মূলত পিএইচপি পরীক্ষা করছেন এবং কোনও ডাটাবেস নয়।

ফলাফলগুলি পুনরাবৃত্তি করতে বিরক্ত করবেন না, মুদ্রণটির বাইরে মন্তব্য করা হোক বা না হোক। অনেক সময় আছে

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

অন্য অংশটি র‌্যাঙ্ক সংখ্যার একগুচ্ছ আপ ছাঁটাই করতে ব্যয় করছে।

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

    }
    return $numbers;
}

তারপরে বি / ডাব্লু ইমপ্লোডে এবং এর মধ্যে একটি বড় পার্থক্য রয়েছে।

এবং অবশেষে এখানে কি চলছে। দেখে মনে হচ্ছে প্রতিবার সংযোগ তৈরি হচ্ছে, সুতরাং এটি সংযোগের সময় এবং ক্যোয়ারির সময় পরীক্ষা করে।

$m = new Mongo();

বনাম

$db = new AQLDatabase();

সুতরাং আপনার 101% দ্রুত জাজ থেকে কেটে নেওয়া অন্তর্নিহিত প্রশ্নের জন্য 1000% দ্রুত হতে পারে।

urghhh।


4
স্বাভাবিকভাবেই কোডিং অনুশীলন যে কোনও পরিস্থিতিতে একটি বড় পার্থক্য আনতে পারে তবে এটি কোনও ধরণের ভাষা, এপিআই বা এক্সটেনশনের সাথে সুনির্দিষ্ট নয়। টাইমার শুরু করার আগে এলোমেলো সংখ্যা তৈরি করা একটি তাত্পর্য তৈরি করবে, তবে প্রক্রিয়াটির মধ্যে বেশিরভাগ সময় ডাটাবেস লেনদেন থেকে সন্দেহ নেই। এলোমেলো সংখ্যা জেনারেশন তুচ্ছ, এসকিউএল এবং নোএসকিউএল ডাটাবেসগুলি নয়।
JSON

1
র‌্যান্ড নম্বরটি বেছে নেবে না। স্পষ্টতই আপনি প্রতিবার তৈরি সংযোগটি মিস করেছেন। সমস্ত ইস্যু উদ্দেশ্য ছাড়া অন্য কিছু পরীক্ষা করতে যোগ করে।
গ্যাবে রেইনবো

2
নাহ, এটি মিস করবেন না। স্ক্রিপ্ট শেষ না হওয়া পর্যন্ত মাইএসকিউএল সংযোগটি বন্ধ করবে না যতক্ষণ না mysqli_close () বলা হয়। অন্যথায়, mysqli_connect () এ পুনরাবৃত্তি কলগুলি নতুন সংযোগ পদ্ধতিতে প্রতিশ্রুতিবদ্ধ না করে কেবল বর্তমান সংস্থান টেবিল থেকে বিদ্যমান mysql সংস্থানটি টানবে। আমি ঠিক কিকিউএলডিটাবেজ অবজেক্টটি নিশ্চিত নই তবে এটি যদি মাইএসকিএল লাইব ব্যবহার করে (এটি সম্ভবত এটি করে) তবে তার একই আচরণ হবে। মঙ্গোডিবি এক্সটেনশানটি সংযোগ পুলিং ব্যবহার করে, সুতরাং কোনও স্ক্রিপ্টে একাধিকবার মংডোব 'সংযোগ' তৈরি করার সময় একই বেসিক জিনিসটি ঘটে।
JSON

আমি সম্মত হই যে তাঁর বেঞ্চমার্কটি অন্যভাবে করা যেত, তবে এটি অন্যান্য মাইএসকিউএল বনাম মঙ্গো বেঞ্চগুলির মতো একই বুনিয়াদি ফলাফলকে প্রতিফলিত করে। মোংগো সন্নিবেশ করার সময় সাধারণত দ্রুত হয় (আরও সাধারণ সন্নিবেশকারীদের জন্য আরও দ্রুত) এবং নির্বাচন করার সময় মাইএসকিউএল সাধারণত দ্রুত হয়।
তাদেরকে JSON

অবশ্যই, আমি খুব বুদ্ধিমান ছিল; এটি "<br>" এর এইচটিএমএল স্ট্রিং কনক্যাট যা আমাকে সত্যই 'অনুরোধ করেছিল'। পরীক্ষাগুলিতে আপনার খুব সুন্দর মুদ্রণের দরকার নেই। এমনকি পুনরুক্তি করা এটি একটি পিএইচপি পরীক্ষা এবং ডাটাবেস পরীক্ষার মতো নয় বলে মনে হয়। সামগ্রিকভাবে, যে এইকিউএল ডেটাবেস 'সম্ভবত / সম্ভবত' মুহুর্ত ... আরও উপাদান মানে আরও অজানা।
গ্যাবে রেইনবো

17

https://github.com/reoxey/benchmark

মাপকাঠি

GOLANG1.6 এবং PHP5- এ মাইএসকিউএল এবং মঙ্গোডিবি-র গতির তুলনা

বেঞ্চমার্কের জন্য ব্যবহূত সিস্টেম: ডেল সিপিউ আই 5 চতুর্থ জেনার 1.70Ghz * 4 র‌্যাম 4 জিবি জিপিইউ র‌্যাম 2 জিবি

INSERT, নির্বাচন, আপডেট, আরডিবিএমএস বনাম NoSQL এর গতির তুলনা 10,100,1000,10000,100000,1000000 সারি বিভিন্ন সংখ্যা নির্বাহ

কার্যকর করার জন্য ব্যবহৃত ভাষাটি হল: পিএইচপি 5 এবং গুগল দ্রুততম ভাষা জিও 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

মাইসাম ইনোডাব নয়, কোন মঙ্গোদব সংস্করণ এবং স্টোরেজ ইঞ্জিন?

1
মাইএসকিউএল এবং মঙ্গোডিবি সংস্করণগুলি নির্দিষ্ট করা গুরুত্বপূর্ণ।
মিরন

1
মাইআইএসএএম ব্যবহার করবেন না। ব্যাচযুক্ত সন্নিবেশ ব্যবহার করুন!
রিক জেমস

মাইএসকিউএল সন্নিবেশ করা কোয়েরিতে মংডব্বের চেয়ে দ্রুত? এটি সত্য বলে মনে হয় না যতক্ষণ না মাইএসকিএলকে কলাম এবং রিলেশনশিপগুলি প্রস্তুত করার প্রয়োজন হয়। মাইএসকিএল নির্বাচনটি মঙ্গোডব নির্বাচনের চেয়ে দ্রুত, তবে সন্ধানের সন্ধানে মঙ্গো দ্রুত
প্রেরণ করুন

6

এখানে একটি সামান্য গবেষণা রয়েছে যে মাইএসকিউএল বনাম মঙ্গো ব্যবহার করে আরডিবিএমএস বনাম নোএসকিউএল অন্বেষণ করেছে, এই সিদ্ধান্তগুলি @ সিয়ান রিলির প্রতিক্রিয়ার সাথে মিলিয়েছে। সংক্ষেপে, সুবিধাটি ডিজাইন থেকে আসে, কিছু কাঁচা গতির পার্থক্য নয়। 35-36 পৃষ্ঠায় উপসংহার:

আরডিবিএমএস বনাম নোএসকিউএল: পারফরম্যান্স এবং স্কেলিং তুলনা

প্রকল্পটি দুটি ডাটাবেস ধরণের পারফরম্যান্স এবং স্কেলাবিলিটিটি পরীক্ষা, বিশ্লেষণ এবং তুলনা করেছে। কীভাবে বর্ধিত লোড দিয়ে ডেটাবেসগুলি পরিমাপ করা হয়েছিল তা বিশ্লেষণের জন্য বিভিন্ন পরীক্ষাগুলিতে বিভিন্ন নম্বর এবং বিভিন্ন ধরণের প্রশ্নের চালানো অন্তর্ভুক্ত ছিল যা অন্যদের চেয়ে আরও জটিল। এই ক্ষেত্রে সবচেয়ে গুরুত্বপূর্ণ বিষয়টি ছিল কোয়েরির ধরণ যা মংগাডিবি আরও জটিল প্রশ্নগুলি দ্রুত পরিচালনা করতে পারে কারণ এটি প্রধানত ডেটা ডুপ্লিকেশনটির ত্যাগের সহজ স্কিমার অর্থ একটি নোএসকিউএল ডাটাবেসে বিপুল পরিমাণে ডেটা ডুপ্লিকেট থাকতে পারে। যদিও আরডিবিএমএস থেকে সরাসরি স্থানান্তরিত একটি স্কিমা ব্যবহার করা যেতে পারে এটি মংডোডিবি'র সাব-ডকুমেন্টগুলির অন্তর্নিহিত উপাত্ত উপস্থাপনার সুবিধাটিকে সরিয়ে ফেলবে যা টেবিলগুলি একত্রিত হওয়ার সাথে সাথে ডাটাবেসের প্রতি কম প্রশ্নের ব্যবহারের অনুমতি দেয়।এই জটিল প্রশ্নগুলিতে মাইংকিউবি'র মাইএসকিউএলের উপর যে পারফরম্যান্স লাভ ছিল তা সত্ত্বেও, যখন বেঞ্চমার্ক মাইএসকিউএল কোয়েরিকে অনুরূপভাবে মঙ্গোডিবি জটিল ক্যোয়ারির মডেল করেছিল নেস্টেড এসইलेक्टগুলি মাইএসকিউএল উচ্চতর সংখ্যক সংযোগের ক্ষেত্রে একইভাবে আচরণ করলেও সেরা সম্পাদন করেছিল। সর্বশেষ প্রকারের ক্যোয়ারী বেঞ্চমার্কযুক্ত যা দুটি জওআইএনএস সমন্বিত জটিল কোয়েরি ছিল এবং একটি সাবকিউরিতে সাবডোকমেন্টগুলির কারণে মাইএসকিউএলের চেয়ে মঙ্গোডিবি-র কী সুবিধা রয়েছে তা দেখিয়েছিল showed এই সুবিধাটি ডেটা সদৃশতার জন্য আসে যা ডাটাবেসের আকার বাড়ায় in যদি কোনও অ্যাপ্লিকেশনে এ জাতীয় প্রশ্নগুলি সাধারণ হয় তবে বৃহত্তর ডাটাবেসের আকারের ফলে স্টোরেজ এবং মেমরির আকারের ব্যয়টি বিবেচনায় নেওয়ার সময় নোএসকিউএল ডাটাবেসগুলিকে বিকল্প হিসাবে বিবেচনা করা গুরুত্বপূর্ণ।


-6

একক সার্ভারে, মংগোডিবি পড়া এবং লেখার ক্ষেত্রে মাইএসএইচএল মাইআইএসএএম এর চেয়ে দ্রুত আর কোনও হবে না, প্রদত্ত টেবিল / ডক আকারের 1 জিবি থেকে 20 জিবি ছোট।
মনোডিবি মাল্টি-নোড ক্লাস্টারে সমান্তরাল হ্রাস দ্রুত করবে, যেখানে মাইএসকিএল অনুভূমিকভাবে স্কেল করতে পারে না।


5
আপনি কি এর প্রমাণ পেতে কিছু প্রমাণ বা আরও বিশদ সরবরাহ করতে পারেন?
স্টিভ ওয়েস্টব্রুক

অনুভূমিকভাবে স্কেল করা যায় না? এনডিবির কী হবে? ডিআরবিডি মাইএসকিউএল সমর্থিত?
আর্নেস্তাস

এটি সত্য নয়। মঙ্গোডিবিতে 16 এমডি নথির সীমা রয়েছে। মাইএসকিউএল চাইলে আরও অনেক কিছু থাকতে পারে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.