Когда мне следует рассмотреть возможность использования базы данных в памяти и на какую проблему следует обратить внимание?
-
22-09-2019 - |
Вопрос
Я просто думал, что теперь это обычно на вашем сервере баз данных достаточно оперативной памяти для кэширования всей базы данных почему специалист в база данных памяти (например, Отсчет времени, смотрите также Страница в Википедии) которые были в моде несколько лет назад и больше не использовались?
Похоже, что с течением времени ни одна дисковая база данных не используется меньше, например, большинство приложений теперь построены на обычных базах данных rational.Я бы ожидал обратного, поскольку оперативная память становится все ближе к тому, чтобы быть бесплатной для многих серверов.
Я спрашиваю об этом, поскольку я только что прочитал об архитектуре переполнения стека, и на странице написано
Это важно, потому что база данных Stack Overflow почти полностью занята оперативной памятью, а соединения по-прежнему требуют слишком высоких затрат.
Но я не думаю, что это было бы проблемой, если бы вместо обычного btree использовались “указатели” и “коллекции”.Btree - очень умный способ обойти ограничения на скорость доступа к диску, например, они меняют использование процессора, чтобы уменьшить использование диска.Однако теперь у нас есть настолько подходящая оперативная память.
Но нам все еще нужна база данных, так как вы делаете свой собственный
- Запирание
- Обнаружение взаимоблокировки
- Ведение журнала транзакций
- Восстанавливающийся
- И т.д.
Это очень тяжело.
@S.Лотт, учитывая, что мы все так долго выбираем индексы, избегаем объединений и исследуем проблемы с производительностью базы данных.Должен быть способ получше.Несколько лет назад нам сказали, что “базы данных в памяти” - лучший способ.Поэтому, прежде чем я перейду к использованию одного из них и т.д., я хотел бы знать, почему другие люди больше ими не пользуются.
(Сам я вряд ли буду использовать TimesTen, так как он стоит дорого (41 500,00 долларов США / Процессор) и мне не нравится разговаривать с продавцами Oracle - я предпочитаю тратить свое время на написание кода.)
Смотрите также:
- Альтернатива базе данных TimesTen в памяти
- Кто-нибудь опубликовал подробное сравнение между различными СУБД в оперативной памяти?
Обновить:
Я задал этот вопрос а ДЛИННЫЙ некоторое время назад, в наши дни Microsoft SQL Server имеет "OLTP в памяти" это оптимизированный для памяти движок базы данных, интегрированный в движок SQL Server.Это недешево, но кажется очень быстро для некоторых рабочих нагрузок.
Решение
Скорее всего, просто не существует зрелых продуктов баз данных memory, которые можно было бы использовать в качестве полной замены классической базы данных.
Реляционные базы данных - это очень старая концепция.Хотя существовало много подходов для продвижения вперед и разработки новых технологий, например.объектно-ориентированные базы данных, реляционные базы данных на самом деле не изменили своих концепций.Не ожидайте, что все изменится слишком быстро, поскольку базы данных не сильно изменились за последние десять-пятнадцать лет или даже дольше.
Я думаю, развитие технологий происходит не так быстро, как можно было бы подумать.Требуются десятилетия, чтобы новые концепции созрели и утвердились.Прежде всего, в технологиях баз данных, где зрелость гораздо важнее всего остального.
Через десять или двадцать лет базы данных, вероятно, будут уже не такими, как сегодня.Если за базами данных в оперативной памяти будущее - сегодня этого никто не может сказать - им просто нужно еще немного времени для разработки.
Другие советы
Никто толком не ответил на вопрос "Когда мне следует рассмотреть возможность использования базы данных в памяти и на какие проблемы следует обратить внимание?", поэтому я попробую.
Вам следует рассмотреть возможность использования базы данных в памяти, если:1.В целевой системе есть данные для управления, но нет постоянного носителя 2.Требования к производительности просто не могут быть выполнены с помощью постоянной базы данных
Для № 1 подумайте о телегиде в вашей телевизионной приставке (STB).Низкобюджетный STB (т.е.те, у кого нет возможности видеорегистратора) не имеют постоянного хранилища и не нуждаются в постоянном хранилище.Но база данных для 400-канального 14-дневного телегида нетривиальна.Здесь также предъявляются требования к производительности, потому что данные поступают с карусели транспондера с высокой скоростью, и это тот случай, когда нужно "зафиксировать их или подождать, пока карусель снова не появится".Но нет необходимости в настойчивости.Мы все это видели;при отключении питания у вас дома, когда он снова включается, телегид сообщает "будет доступен в ближайшее время", потому что он обеспечивает себя с помощью транспондера или кабельной головки.Сетевые маршрутизаторы имеют одни и те же характеристики:нет постоянного хранилища, требуется скорость, и база данных может быть подготовлена из внешнего источника (в данном случае одноранговых маршрутизаторов в сети для повторного заполнения таблицы маршрутизации).
Есть бесконечные примеры #2:Целеуказание в режиме реального времени в военных системах, высокочастотных торговых системах и многом другом.
Что касается второй части вопроса, "проблема, на которую следует обратить внимание":Их очень много.
Убедитесь, что вы оцениваете настоящую базу данных в памяти, если вам нужна производительность, которую может обеспечить только база данных в памяти.Кэширование постоянной базы данных - это не одно и то же.Создание постоянной базы данных на оперативном диске - это не одно и то же.Использование базы данных в памяти, которая по своей сути ведет журнал транзакций (например, TimesTen), - это не одно и то же (даже если вы входите в /dev/null).
Убедитесь, что вы оцениваете систему баз данных, а не просто кэш (напримеркэш памяти).Система баз данных будет иметь поддержку транзакций со свойствами ACID, несколько вариантов индексации, поддержку параллельного доступа и многое другое.
О КИСЛОТЕ:системы баз данных в оперативной памяти не испытывают недостатка в "D" (долговечности).Это просто нужно воспринимать в контексте.Транзакции в постоянной базе данных долговечны только до тех пор, пока носитель, на котором они хранятся, долговечен.То же самое верно и для баз данных в памяти.В любом случае, если вы заботитесь о долговечности, вам лучше иметь резервную копию.
Тенденция, по-видимому, заключается в агрессивном кэшировании и использовании базы данных для заполнения кэша.Независимо от того, где находится база данных, объединения по-прежнему дороги, поэтому, по-видимому, предпочтительнее выполнить объединение один раз и кэшировать результат во что-то вроде Кэшированный в памяти или Скорость.
Все еще существуют базы данных в памяти, и они используются, но это зависит от контекста, в котором вы хотите их использовать. Базы данных SQLite например, часто используется в качестве базы данных в памяти при тестировании слоев данных.
Наиболее важной причиной является культура грузоперевозок и очень низкий уровень знаний в этой области.Большинство приложений работают достаточно хорошо, независимо от используемого решения для обеспечения сохраняемости, и поскольку компьютеры с каждым годом становятся все быстрее, недостаточно людей чувствуют боль и способны точно определить проблему.
Microsoft и Oracle зарабатывают слишком много денег на своих продуктах для баз данных, чтобы у них была (политическая) возможность предложить более эффективные подходы.
Затраты на разработку, связанные с использованием реляционной базы данных, непрозрачны, поэтому руководство понятия не имеет о существовании проблемы, не говоря уже о решении.
Что ж, в базах данных в оперативной памяти обычно отсутствует D (долговечность) в КИСЛОТА (атомарность, последовательность, изолированность, долговечность) по самой их природе.В какой-то степени это можно преодолеть с помощью "гибридных" подходов, однако в какой-томомент что-то (либо сами данные, либо журнал транзакций) должно быть сохранено где - то чтобы обеспечить аспект долговечности.Обычно это может снизить производительность или привнести другие нежелательные свойства в решение для базы данных в памяти
Напротив, большинство современных СУБД имеют полный набор ACID, а также имеют за плечами многие десятилетия разработки.Это привело к созданию систем баз данных на базе дисков, которые отличаются высокой производительностью, особенно с учетом многолетних улучшений и оптимизаций, которые наблюдаются в современной системе RDBMS (ваша Бтри пример, являющийся лишь одним из многих).
Другим фактором является наша способность как разработчиков приложений снижать нагрузку на базу данных с помощью таких механизмов, как кэширование, тем самым сжимая гораздо больше воспринимаемый производительность на уровне данных приложения.Действительно, само кэширование в последние годы претерпело значительные изменения, и распределенное кэширование стало обычным явлением в наши дни (просто посмотрите на количество пользователи memcached, например).
По иронии судьбы, современные системы кэширования во многих отношениях медленно превращаются в нечто похожее на настоящую систему баз данных в оперативной памяти.Базы данных в оперативной памяти, как и объектно-ориентированные базы данных, в значительной степени являются "новичками в блоке", поэтому будет интересно посмотреть, куда все это приведет со временем.Oracle теперь приобрела TimesTen, и, согласно эта статья в Википедии, Microsoft рассматривает возможность выхода на рынок баз данных в оперативной памяти довольно скоро.Это два современных "крупных игрока" в области традиционных СУБД, которые серьезно относятся к системам баз данных в оперативной памяти.
Это тоже вариант: http://www.memsql.com/
Я не использовал его лично, но предполагается, что это что-то вроде встроенной замены MySQL в памяти.
Различные переносимые версии SQL, которые будут работать с одинаковой эффективностью, предназначены в основном для мобильных устройств.
Версия SQL Server Compact Edition
Это просто крупные игроки, могут быть и другие варианты, но крупные игроки справляются с минимальными требованиями при его выпуске..:)
а в базе данных memory у вас есть постоянное резервное копирование данных, если возникнут колебания или отключение питания, вы можете потерять всю связку.как и в других, которые будут обрабатываться как свои во вторичной памяти (HDD), и вероятность потери составит 10% по сравнению с базой данных памяти.
Я надеюсь, что это может помочь :)
Наиболее типичным вариантом использования базы данных является сохранение, что делает большинство баз данных в памяти непригодными.Одна из популярных причин использования базы данных в памяти - это цели тестирования.Но для этого требуется, чтобы вы использовали либо базу данных, которая может быть настроена как в памяти, либо что-то еще.
Популярными вариантами в этой области, по-видимому, являются RavenDB для .Net-разработчиков и OrientDB для разработчиков Java.Поскольку оба могут функционировать как базы данных в памяти и "что-то еще" в зависимости от конфигурации, поэтому вы можете использовать одно или другое в зависимости от вашей конфигурации (app.config в .Net, Maven или Ant settings в Java).
Потребности в обработке данных становятся все более сложными, и экосистема продукта развивается для удовлетворения этих новых потребностей.Дисковые СУБД, кэш-память в оперативной памяти и базы данных в оперативной памяти используются для удовлетворения различных потребностей.Вы должны выбрать то, что соответствует вашим потребностям -
Традиционные СУБД: Ваш кластер MySQL достаточно быстр, достаточно прост в обслуживании, и вам нравится надежность соответствия ACID.
Распределенный cahce в памяти: Вашему приложению необходимо выполнять быстрые операции чтения и записи, не слишком беспокоясь о согласованности или сложных транзакциях.
СУБД в оперативной памяти:
- (Скорость):Вашему приложению необходимо обрабатывать данные / запросы быстрее, чем это может сделать ваша дисковая база данных.
- (Сложность):Вам нужно выполнять сложные транзакционные операции чтения и записи с помощью объединений и агрегаций, и вам нравится использовать возможности SQL.
- (Масштабируемость):Вам необходимо масштабировать свою базу данных по горизонтали без простоев.
- (Ремонтопригодность):База данных нужна вам для обеспечения высокой доступности, репликации, балансировки нагрузки и аварийного восстановления без дополнительных затрат на обслуживание.
- (Предостережение):Ваши данные должны умещаться в памяти (обычно в терабайтах).