Які переваги Mnesia перед основними реалізаціями баз даних SQL і чим вона відрізняється від них?
Чи можу я використовувати базу даних для зберігання дійсно величезної кількості даних без помітного зниження продуктивності?
Які переваги Mnesia перед основними реалізаціями баз даних SQL і чим вона відрізняється від них?
Чи можу я використовувати базу даних для зберігання дійсно величезної кількості даних без помітного зниження продуктивності?
Відповіді:
Вибачте, що запізнилися на вечірку. :) Ось моя відповідь, заснована на використанні Mnesia з 1996 року та різних інших технологіях баз даних з 1988 року.
Mnesia та MySQL - це справді різні звірі, і який з них найкращий, дуже залежить від того, як ви збираєтесь ним користуватися.
Якщо ваша заявка написана в Ерланге, Mnesia дозволяє зберігати дані в тому ж просторі пам'яті, що і ваша програма, а це означає, що ви можете отримати один об'єкт даних так само швидко, як за кілька мікросекунд. У MySQL це неможливо, оскільки ваш додаток та база даних будуть розділені в пам'яті. Причиною, чому Мнезія може це зробити і досі є надійною, є те, що Ерланг реалізує "захист" пам'яті на мовному рівні.
Загалом, бази даних SQL, як правило, надають перевагу пропускній здатності над затримкою, а коли мова заходить про затримку, Mnesia + Erlang, як правило, є видатними. Вам потрібно вирішити, який із вас є найважливішим. Як говориться в документах (вище), цільовими програмами Mnesia були програми комутації телекомунікацій, де вимоги часу відповіді, наприклад, для налаштування виклику, становили близько 20 мс. Це по суті означало, що ви можете читати з бази даних лише в тому випадку, якщо дані перебувають у спільній пам'яті, але уникнете запису на постійне зберігання на основі налаштування за викликом. ОТОХ, ці програми практично не потребують підтримки спеціальних запитів і не використовують дуже великі набори даних. Деяка робота була проведена для розширення придатності Mnesia для інших областей, але це не є пріоритетним завданням для команди розвитку Erlang / OTP. Мнезія - така, яка вона є, і, швидше за все, так і залишиться.
У посиланні вище, де Mnesia та MySQL порівнюються за швидкістю, потрібно пам’ятати, що це в eJabberd, який працює проти одного сервера, якщо це MySQL і працює повністю реплікуваної бази даних, якщо це Mnesia - і великих кластерів eJabberd може мати стільки, скільки 10 або більше ерланг-вузлів (і, отже, 10 або більше реплік Мнезії). З точки зору надмірності, це досить смішно і дорого, і Мнезія аж ніяк не змушує вас це зробити. Це, очевидно, дає злісно-швидкі зчитування на кожному вузлі, але запис буде дуже дорогим. Я прочитав кілька порівнянь, які порівнюють розподілену Mnesia з одновузловим MySQL; якщо надмірність не потрібна для MySQL, вона не повинна бути потрібною і для Mnesia. Mnesia досить гнучка в тому, що дозволяє вибирати шаблони реплікації, а розташування даних прозоре для програми.
Mnesia також не обмежується 2 Гб на стіл (хоча певний варіант зберігання є). Найбільша база даних Mnesia, про яку я знаю, має близько 600 ГБ даних у (64-бітному) оперативній пам'яті + диску, хоча я цього не рекомендую. Все, що ємністю до 10-20 Гб, повинно бути прекрасно з сучасним обладнанням, але повністю пропускайте disc_only_copies і використовуйте disc_copies - купуйте більше оперативної пам’яті, якщо вам доведеться. Я б подумав двічі, перш ніж використовувати підтримку заточування (mnesia_frag) - це працює, але рідко варто турбуватися.
Мабуть, найбільша різниця між Mnesia і MySQL - це сам SQL: Mnesia насправді не має порівнянних функціональних можливостей; QLC пропонує деяку підтримку спеціальних запитів, але він не в тій же лізі, що і SQL, і не є рівнем оптимізації запитів. У обладнанні та забезпеченні MySQL також є вищим, і якщо вам потрібна аналітика, не виникає сумніву, який саме вибрати (тобто НЕ Мнезія).
Найкращий спосіб переглянути Мнезію - це розширення мови Ерланг. Він надає дані прямо під рукою, і відмінно підходить для невеликих наборів даних, де структура даних та структури доступу добре відомі. З цією метою використовувати MySQL настільки ж незручно, як і використовувати Mnesia для речей, де MySQL працює найкраще.
Більшість додатків потрапляють десь посеред, і саме це стає викликом рішення. Ви можете в кінцевому рахунку використовувати обидва ...
З документації :
Mnesia - це розподілена система управління базами даних, підходяща для телекомунікаційних програм та інших додатків Erlang, які потребують постійної роботи та м'яких властивостей у режимі реального часу. Це один розділ платформи Open Telecom (OTP), яка є платформою системи управління для побудови телекомунікаційних програм.
Зокрема, дуже високий рівень стійкості до відмов, який необхідний у багатьох системах безперервної роботи, у поєднанні з вимогами до СУБД для роботи в тому ж адресному просторі, що і додаток, призвів до впровадження абсолютно нової СУБД. називається Мнезія. Mnesia реалізований і дуже тісно пов'язаний з мовою програмування Erlang, і це забезпечує функціонал, необхідний для впровадження несправних телекомунікаційних систем. Mnesia - це багатокористувацька розподілена СУБД, спеціально створена для промислових програм телекомунікацій, написана символічною мовою програмування Erlang, яка також є цільовою мовою. Mnesia намагається вирішити всі проблеми управління даними, необхідні для типових телекомунікаційних систем, і він має ряд особливостей, які зазвичай не зустрічаються в традиційних базах даних.
У телекомунікаційних програмах є різні потреби від функцій, що надаються традиційними СУБД. Програми, реалізовані зараз мовою Erlang, потребують суміші широкого спектру функцій, які, як правило, не задовольняються традиційними СУБД. Mnesia розроблений з такими вимогами:
Швидкий пошук у режимі реального часу ключ / значення
Складні запити в режимі реального часу, головним чином щодо експлуатації та обслуговування
Поширені дані завдяки розподіленим програмам
Висока відмовність
Динамічна переконфігурація
Складні об'єкти
Що відрізняє Mnesia від більшості інших СУБД, це те, що він розроблений з урахуванням типових проблем управління даними телекомунікаційних програм. Отже, Mnesia поєднує багато понять, знайдених у традиційних базах даних, таких як транзакції та запити, з концепціями, знайденими в системах управління даними для телекомунікаційних додатків, таких як дуже швидкі операції в режимі реального часу, налаштований ступінь відмовостійкості (за допомогою реплікації) та можливість переконфігуруйте систему, не зупиняючи і не зупиняючи її. Mnesia також цікава завдяки тісній зв'язці з мовою програмування Erlang, таким чином, майже перетворивши Erlang в мову програмування бази даних. Це має багато переваг, головне - це невідповідність опору між форматом даних, що використовується СУБД, і форматом даних, що використовується мовою програмування,
Mnesia порівняно з MySQL, продуктивність :
ejabberd споживає менше обчислювальних ресурсів при використанні деякої * бази даних SQL, ніж при використанні внутрішньої Mnesia. Вас, напевно, цікавить ця тема, коли у вас є багато одночасних користувачів (наприклад, понад 1000). Мало хто з одночасними користувачами споживає процесор ejabberd незначно, тому адміністратори невеликих серверів не переймаються налаштуванням зовнішнього SQL-сервера та бази даних.
CouchDB проти Mnesia, V. MySQL та інші теми Mnesia :
Одне розуміння, яке одразу ж прийшло до тями, - це те, що, хоча мені було очевидно очевидно, як структурувати дані для MySQL, це менше для Mnesia, а для CouchDB я все ще не зовсім впевнений у найкращому підході. Наразі ось декілька більш очевидних моментів:
'Запис' має поле 'numplays', яке очевидно вказує, скільки разів воно було відтворено. Це добре в MySQL, але якщо я просто включу це поле в документ для CouchDB, я отримуватиму повний перегляд дубліката документа в базі даних кожного разу, коли це число змінюється, що здається жахливо неефективним.
Розкладка трьох таблиць у MySQL записів, тегів та таблиці зв’язків між ними (див. Сценарій, якщо це не зрозуміло) є (мені щонайменше) правильним рішенням, але існує багато можливих способів зробити це і в Mnesia, і в CouchDB, і я вважаю, що відповіді інтуїтивно не маю.
Коротше кажучи, він розроблений для дуже конкретних цілей і, здається, добре розроблений, щоб відповідати цілі. Жодна база даних не може бути абстрактно порівняно з іншою. Лише за допомогою вимог можна спонукати елементи співмірності.
Ні, я б не сказав, що Манезія хороша для великої кількості даних. Ви можете використовувати Ets або Dets як бекенд. Якщо ви вибрали Ets, ваша база даних збережеться лише в пам'яті та дуже швидко, але дані не зберігаються. І якщо ви хочете, щоб ваші дані зберігалися (зберігалися на диску), вам потрібно використовувати Dets, який має обмеження 2 Гб , тому ваша база даних не може містити більше 2 ГБ даних.
Ви можете використовувати користувацький сервіс, наприклад, inestore, який використовується в базі даних Riak NoSQL.
Перевагами Mnesia є те, що це розподілена база даних, тому дуже легко робити системи, що мають відмовки, якщо у вас є більше одного комп’ютера. І в Erlang це дуже просто, оскільки це мовна база даних і діє «як функція». І це також дуже швидко, якщо вам потрібна лише база даних в пам'яті, наприклад, як кеш.