В памяти базы данных - PullRequest
       14

В памяти базы данных

2 голосов
/ 07 марта 2009

Я использую SqlServer для управления приложением WPF, в настоящее время я использую NHibernate и предварительно читаю все данные, поэтому они кэшируются по соображениям производительности. Это работает для одного клиентского приложения, но мне было интересно, есть ли база данных в памяти, которую я мог бы использовать, чтобы я мог делиться информацией между несколькими приложениями на одном компьютере. В идеале это должно быть ниже моего стека NHibernate, поэтому мой код не должен был бы измениться. По сути, я пытаюсь перевести мою БД из традиционного формата на сервере, чтобы она была в БД в памяти на клиенте.

Примечание. Мне нужна только функция выбора.

Ответы [ 4 ]

3 голосов
/ 07 марта 2009

Я был бы невероятно удивлен, если бы вам даже нужно было загрузить всю вашу информацию в память. Я говорю это потому, что в качестве одного примера я работаю над веб-приложением, которое (по разным причинам) загружает тысячи записей на многих страницах. Это PHP + MySQL. И даже в этом случае он может сделать это и визуализировать страницу за 100 мс.

Прежде чем идти по этому маршруту, убедитесь, что вам нужно. Сначала сделайте вашу базу данных максимально производительной. Теперь очевидно, что это включает в себя такие вещи, как наличие соответствующих индексов и настройка базы данных, но даже если вы ставите лошадь перед повозкой.

Прежде всего, вам необходимо убедиться, что у вас есть хорошая модель реляционных данных: та, которая поддается для выполнения запросов. Это столько же искусства, сколько и науки.

Также вам может понравиться NHibernate, но ORM не всегда лучший выбор . Например, в некоторых ключевых случаях SQL-код, написанный вручную, будет значительно лучше.

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

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

Одна из причин, по которой следует избегать кэширования в памяти, заключается в том, что он добавляет много сложности. Вам приходится иметь дело с такими проблемами, как истечение срока действия кэша, независимые обновления базового хранилища данных, используете ли вы синхронные или асинхронные обновления, как вы предоставляете клиенту согласованное (если не актуальное) представление ваших данных, как вы поступаете с аварийным переключением и репликацией и так далее. Это огромная сложность, которую нужно заплатить.

Предполагая, что вы сделали все вышеперечисленное и вам все еще это нужно, мне кажется, что вам нужно решение для кеша или сетки. Вот обзор решений Java для грид / кластеров , но многие из них (например, Coherence, memcached) применимы и к .Net. Другой выбор для .Net - Velocity .

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

1 голос
/ 10 мая 2017

Вы можете использовать HANA, экспресс-издание. Вы можете скачать его бесплатно , он находится в памяти, столбчатый и предоставляет дополнительные аналитические возможности, такие как анализ текста, геопространственные или прогнозные данные. Вы также можете получить доступ к ODBC, JDBC, библиотеке hdb node.js, API-интерфейсам REST и другим.

1 голос
/ 07 марта 2009

Velocity - это сервер кэширования внепроцессных объектов, разработанный Microsoft для выполнения практически любых задач, хотя на данный момент он работает только в форме CTP.

Я считаю, что есть также оболочки для memcached, которые также могут использоваться для кэширования объектов.

1 голос
/ 07 марта 2009

http://www.db4o.com/ можешь быть твоим другом!

...