] Быстрая база данных для хранения 1 миллиарда записей [закрыто]

Я пишу код для хранения данных и хочу хранить от 1 до 10 миллиардов записей или даже больше. Наиболее важным является скорость (около 10 000 - 20000 записей в секунду), Использование SPACE и защита от сбоев.Теперь я играл с MySQL MyISAM, и он работает довольно БЫСТРО и соответствует необходимой нам скорости.MyISAM также имеет оптимальное использование ПРОСТРАНСТВА, а файл базы данных в папке данных MySQL был почти равен количеству данных, которые я вставил, например. на 100000 записей по 30 символов в каждой потребовалось всего 3 МБ. Но единственная проблема в том, что это не ACID, и он может привести к потере данных при сбоях.

Итак, я хотел знать какие-либо альтернативы (я даже не возражаю против замены программного обеспечения базы данных на что-нибудь еще), которые могут помочь нам хранить так много данных и хранить их БЫСТРО.

Я уже пробовал MySQL INNODB, и его вставки очень медленные. Я смог достичь только 800 - 1000 записей в секунду. Также объем места для хранения данных в INNODB довольно велик. Для хранения тех же 100000 записей по 30 символов в каждой требуется почти 8 МБ.

Я также пробовал MongoDB в качестве альтернативы, но опять же требуется СЛИШКОМ много места для хранения тех же данных.

Даже БД SQLITE3 ОЧЕНЬ МЕДЛЕННО записывает 100000 записей. Я пробовал это с PHP в цикле for. Он также пропустил около 20 записей и выдал ошибки недоступности базы данных.

Итак, я хотел узнать о любом программном обеспечении для баз данных с открытым исходным кодом, которое может удовлетворить мои требования. Я слышал, что ARIA MariaDB соответствует требованиям ACID. Это правда? Или PostgreSQL также является хорошим быстрым вариантом с оптимальным использованием пространства.

Я открыт для любого решения, которое является БЫСТРЫМ, использует оптимальное пространство, а также является устойчивым к АВАРИЯМ. Жду ответов.

=== ОБНОВЛЕНИЕ MariaDB Aria === Это даже хуже, чем InnoDB, когда дело касается скорости вставки и пространства. Для вставки тех же данных потребовалось в 1,5 раза больше времени, чем InnoDB, и почти в 2,5 раза больше места, используемого MyISAM.

2
задан 31 July 2012 в 12:50
5 ответов

Это не та вещь, которую можно на 100% «прибить» за 5 минут, но если вы хотите постоянно достигать такого уровня производительности и функциональности , то я сильно подозреваю, что вам придется потратить деньги.

Если у вас есть бюджет для этого, я бы посмотрел на объединение Движок Oracle TimesTen, возможно, с корпоративным SSD или PCIe Flash (например, FusionIO), и если вы зашли так далеко, я бы рекомендовал использовать серию Intel Xeon E7-xxxx, поскольку они обладают фантастическими возможностями RRAS для поддержания вашего сервера и работать как можно дольше в случае сбоев.

7
ответ дан 3 December 2019 в 08:36

Если бы для получения дополнительных функций и повышения производительности нужно было просто использовать другое программное обеспечение, то все бы этим занимались (по крайней мере, те немногие, кто все еще работает в ИТ;)

Если вам нужно Поддержка ACID - тогда зачем пробовать mongoDB?

Вполне возможно получить желаемую пропускную способность с innodb (но myisam быстрее) - при условии, что вы потратите достаточно на оборудование и правильно настроите систему. Но то, что ваше первое ограничение - минимизировать использование пространства, это скорее означает, что у вас нет бюджета, чтобы пойти и купить набор SSD RAID.

может вызвать потерю данных при сбоях

Я видел потери данных на сбои в Oracle и Sybase - но да, теоретически они должны быть более устойчивыми. Я обычно тратил время, силы и деньги на то, чтобы в первую очередь избежать сбоя (выделенный сервер, с использованием аппаратного обеспечения разумного качества, ИБП, стабильного программного обеспечения).

Даже база данных SQLITE3 ОЧЕНЬ МЕДЛЕННАЯ

SQLite особенно чувствителен к базовой файловой системе (но это повлияет на все базы данных). То, что вы не упоминаете, в какой файловой системе (или даже какой операционной системе!) Она работает, заставляет меня думать, что вы не потратили много времени на настройку установки.

Если бы это был я, у меня был бы посмотрите MariaDB - это форк mysql и включает улучшенный механизм ISAM ( Aria ), который имеет некоторые преимущества в производительности и поддерживает транзакции. (работает под Linux, использует xfs без барьеров и планировщик крайних сроков.)

Но вам нужно посмотреть на свое оборудование, чтобы оно действительно заработало.

Даже БД SQLITE3 ОЧЕНЬ МЕДЛЕННАЯ

SQLite особенно чувствителен к базовой файловой системе (но это повлияет на все базы данных). То, что вы не упоминаете, в какой файловой системе (или даже какой операционной системе!) Она работает, заставляет меня думать, что вы не потратили много времени на настройку установки.

Если бы это был я, у меня был бы посмотрите MariaDB - это форк mysql, включающий улучшенный механизм ISAM ( Aria ), который имеет некоторые преимущества в производительности и поддерживает транзакции. (работает на Linux, использует xfs без барьеров и планировщик крайних сроков.)

Но вам нужно посмотреть на свое оборудование, чтобы оно действительно заработало.

Даже БД SQLITE3 ОЧЕНЬ МЕДЛЕННАЯ

SQLite особенно чувствителен к базовой файловой системе (но это повлияет на все базы данных). То, что вы не упоминаете, в какой файловой системе (или даже какой операционной системе!) Она работает, заставляет меня думать, что вы не потратили много времени на настройку установки.

Если бы это был я, у меня был бы посмотрите MariaDB - это форк mysql и включает улучшенный механизм ISAM ( Aria ), который имеет некоторые преимущества в производительности и поддерживает транзакции. (работает под Linux, использует xfs без барьеров и планировщик крайних сроков.)

Но вам нужно посмотреть на свое оборудование, чтобы оно действительно заработало.

) это заставляет меня думать, что вы не потратили много времени на настройку установки.

Если бы это был я, я бы взглянул на MariaDB - это форк mysql и включает улучшенный механизм ISAM ( Aria ), который имеет некоторые преимущества в производительности и поддерживает транзакции. (работает на Linux, использует xfs без барьеров и планировщик крайних сроков.)

Но вам нужно посмотреть на свое оборудование, чтобы оно действительно заработало.

) это заставляет меня думать, что вы не потратили много времени на настройку установки.

Если бы это был я, я бы взглянул на MariaDB - это форк mysql и включает улучшенный механизм ISAM ( Aria ), который имеет некоторые преимущества в производительности и поддерживает транзакции. (работает на Linux, использует xfs без барьеров и планировщик крайних сроков.)

Но вам нужно посмотреть на свое оборудование, чтобы оно действительно заработало.

3
ответ дан 3 December 2019 в 08:36

По моему опыту, InnoDB (при правильной настройке и использовании) лишь немного медленнее MyISAM (конечно, не на порядок). Мне приходит в голову несколько предложений по повышению производительности:

  • Вы должны использовать последние версии механизма хранения MySQL InnoDB.
  • Вы должны использовать большой буферный пул (~ 80% доступной ОЗУ) и большой размер файла журнала.
  • Вы должны использовать транзакции и пакетные вставки, чтобы получить высокую пропускную способность. Размер пакета - важный фактор производительности (не слишком маленький, но и не слишком большой).
  • Вы должны использовать AUTOINCREMENT id как PRIMARY KEY. Любые индексы снизят вашу скорость вставки, особенно UNIQUE.
  • Вы должны использовать самый низкий уровень изоляции транзакции, который работает для вас.
  • Настройте innodb_flush_method для вашей системы.
  • Если вы этого не сделаете. t требуются полные гарантии ACID, попробуйте изменить значение innodb_flush_logs_at_trx_commit
  • Используйте соответствующее оборудование, настройте свою ОС / хранилище / файловую систему

Вы найдете полезные указатели здесь:

2
ответ дан 3 December 2019 в 08:36

очень-очень быстрая БД: MemSQL

0
ответ дан 3 December 2019 в 08:36

есть множество параметров, которые можно использовать для настройки innodb. myisam для такого количества данных не подходит - например, он требует ремонта после сбоя.

взгляните на mysqltuner или мастер настройки sql percona ; Добавьте на него много оперативной памяти и быстрой io-подсистемы, и innodb может дать вам очень приличную производительность.

innodb позволяет сжатие данных на лету . это не ускорит работу, но может сэкономить место для хранения.

независимо от выбранного механизма БД:

  • попробуйте группировать вставки, если возможно, установите систему очередей между производителем данных и базой данных
  • подумайте о сегментировании ваши данные
  • подумайте о распараллеливании процесса вставки. Это' Я не помогу вам с myisam, но может повысить производительность с innodb на mysql и других серверах баз данных
0
ответ дан 3 December 2019 в 08:36

Теги

Похожие вопросы