Вопрос

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top