Обдумываю один свой интернет-сайт, суть такая,
Каждый день или чуть реже нужно будет обновлять данные для 5-40 млн записей, и эта цифра будет постоянно расти, каждый месяц примерно на 5-10% записей в таблицу будет добавляться. \
На базу данных будут примерно такие нагрузки:
- поиск - есть ли запись в базе данных с указанным названием, если есть то обновляем данные там. Т. е. перед тем как добавить запись (а их напомню - вначале будет 5-40 млн и будут постоянно возрастать) будет проверять есть она в базе данных и добавлять/обновлять данные. Функция очень нужная и массовая, поэтому не хотелось бы чтобы она выполнялась дольше 0,1 секунды.
- поиск по базе данных с указанными параметрами (например, чтобы такой-то параметр был больше указанного значения и подобные условия) и эта функция будет достаточно часто использоваться (в общем количестве раз 100 в день, и в последующем будет только увеличиваться многократно в зависимости от количества пользователей сайта). Тут такая скорость не так критична, но тоже должна быть относительно быстрая (максимум скажем можно 5-20 секунд )
Хочу узнать какими способами можно организовать структуру хранения большой информации ?
Какую базу данных выбрать? Подойдет ли MySQL для этих задач?
SQL
База данных для хранения больших данных?
Если вам не нужны джойны, а только хранение и получение, то можете ради интереса попробовать MongoDB. У меня на ней сейчас крутится около 4 терабайт данных.
Она быстра (особенно когда куча оперативы на сервере) , много всего держит в буфере памяти и поиск идет очень шустро (при правильном индексировании данных). Легко расширяема (как горизонтально, так и вертикально) за счет шардинга (аналог партиционирования РСУБД) , так же есть надежные механизмы по отказоустойчивости.
Еще большой плюс в сжатии данных на диске (4 терабайта физически в дата файлах на диске занимают около 600 Гигов, при использовании 'быстрого' сжатия, второй тип сжатия, который позиционируется как более основательное, но более медленное я не тестировал, этого за глаза хватает )
В целом 50 млн записей учитывая кол-во полей если в среднем взять по 1 КБ -> 50 Гигов даты -> после сжатия (коэф сжатия на быстром режиме примерно в 8 раз) -> 6 Гигов на диске. Выйгрыш в поиске будет еще в том что операции чтения с диска самые медленные, соответственно меньше данных на диске, меньше операций чтения, т. е. надо будет читать меньше дисковых блоков с данными
Она быстра (особенно когда куча оперативы на сервере) , много всего держит в буфере памяти и поиск идет очень шустро (при правильном индексировании данных). Легко расширяема (как горизонтально, так и вертикально) за счет шардинга (аналог партиционирования РСУБД) , так же есть надежные механизмы по отказоустойчивости.
Еще большой плюс в сжатии данных на диске (4 терабайта физически в дата файлах на диске занимают около 600 Гигов, при использовании 'быстрого' сжатия, второй тип сжатия, который позиционируется как более основательное, но более медленное я не тестировал, этого за глаза хватает )
В целом 50 млн записей учитывая кол-во полей если в среднем взять по 1 КБ -> 50 Гигов даты -> после сжатия (коэф сжатия на быстром режиме примерно в 8 раз) -> 6 Гигов на диске. Выйгрыш в поиске будет еще в том что операции чтения с диска самые медленные, соответственно меньше данных на диске, меньше операций чтения, т. е. надо будет читать меньше дисковых блоков с данными
40 миллионов записей с приростом 10% в месяц через год дадут 125М, через 5 - 12 миллиардов. Дело пахнет Терадатой и соотв. железом.
Да, MySQL (точнее, MariaDB или Percona Server - форки имеют лучший функционал, чем оригинальная MySQL) вполне потянет. Но я бы предложил присмотреться к PostgreSQL.
Кстати, операция "вставка или замена" в MySQL делается одной командой: INSERT ON DUPLICATE KEY - безо всяких поисков и проверок. Есть ещё REPLACE, но эту команду лучше не использовать.
100 млн. записей - это не такие уж и большие данные. Но более чем достаточные для того, чтобы всерьёз заняться оптимизацией структуры базы данных. Прежде всего: индексы, секционирование (partition) и репликация.
Индексы ускоряют поиск (только те запросы, которые используют эти индексы) но замедляют вставку / изменение. Индексы - всегда компромисс.
Продуманное секционирование ускоряет работу с данными, но не совместимо с внешними ключами - поддержание целостности данных перекладывается на тебя.
Репликация позволяет разнести поиск и изменение данных по разным экземплярам базы данных. Но для этого нужно несколько серверов.
P.S. О многоуровневой системе не задумывался? Когда меняющиеся данные заливаются в маленькую оперативную базу, а уже из неё постепенно переносятся в большое хранилище.
Кстати, операция "вставка или замена" в MySQL делается одной командой: INSERT ON DUPLICATE KEY - безо всяких поисков и проверок. Есть ещё REPLACE, но эту команду лучше не использовать.
100 млн. записей - это не такие уж и большие данные. Но более чем достаточные для того, чтобы всерьёз заняться оптимизацией структуры базы данных. Прежде всего: индексы, секционирование (partition) и репликация.
Индексы ускоряют поиск (только те запросы, которые используют эти индексы) но замедляют вставку / изменение. Индексы - всегда компромисс.
Продуманное секционирование ускоряет работу с данными, но не совместимо с внешними ключами - поддержание целостности данных перекладывается на тебя.
Репликация позволяет разнести поиск и изменение данных по разным экземплярам базы данных. Но для этого нужно несколько серверов.
P.S. О многоуровневой системе не задумывался? Когда меняющиеся данные заливаются в маленькую оперативную базу, а уже из неё постепенно переносятся в большое хранилище.
Сервер, как понимаю, будет свой и причём не один, с такими-то запросами
Скорость критична... Сама бы посмотрела в сторону nosql СУБД (вот какую именно из них брать - не скажу, не мониторила вопрос)
MySQL однозначно не подойдёт, как и все остальные бесплатные реляционные СУБД. Насчёт платной Oracle сомневаюсь, возможно и выдержит
Скорость критична... Сама бы посмотрела в сторону nosql СУБД (вот какую именно из них брать - не скажу, не мониторила вопрос)
MySQL однозначно не подойдёт, как и все остальные бесплатные реляционные СУБД. Насчёт платной Oracle сомневаюсь, возможно и выдержит
Ulugbek Umarov
А почему реляционные не подойдут, объясните пожалуйста ?
Похожие вопросы
- От чего зависит скорость восстановления базы данных?
- В какой программе делают базу данных?
- Форма ввода в базу данных MySQL через Php
- Посоветуйте бесплатный хостинг для создания, размещения баз данных для офисной работы
- Нужна помощь по курсовой. Тема Базы данных
- 4.Как создать таблицу в базе данных
- База данных в Access, проверить является ли данная связь многие ко многим и объяснить её
- Создать базу данных
- В чём смысл Баз Данных?
- Система Управления Базой Данных (СУБД или СУРБД) - Я понимаю. Сервер - понимаю. А что такое Сервер Базы Данных???
думаю примерно может быть до 50-80 млн записей ВСЕГО на ближайшие 5 лет.
Да, я под записью понимаю просто строчку с номер, названием, и другими доп данными