2011-03-06 3 views
5

Я хотел бы удалить sql-зависимость небольших кусков данных, которые я загружаю (почти) каждый запрос в веб-приложении. Большая часть данных структурирована по ключевым словам/документам, но реляционное решение не исключается. Данные не слишком большие, поэтому я хочу сохранить их в памяти для повышения доступности.Рекомендация для базы данных в памяти

Какое решение вы рекомендуете?

+0

Вы можете поделиться тем, что веб-стек вы используете? LAMP или .NET или? – DuckMaestro

ответ

6

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

Memcached является магазин ключ-значение в памяти для небольших кусков произвольных данных (строки, объекты) из результатов вызовов базы данных, вызовы API, или страницы рендеринг.

Список клиентов впечатляет. Это было давно. Хорошая документация. Он имеет API практически для всех языков программирования. Горизонтальное масштабирование довольно просто. По моему опыту, Memcached - это хорошо.

Возможно, вы также захотите изучить MemBase.

1

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

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

6

Redis подходит для данных такого типа. Он также поддерживает некоторые фундаментальные структуры данных и обеспечивает их работу.

Недавно я преобразовал свое приложение для форума Django, чтобы использовать его для всех данных в режиме реального времени/отслеживания. Это так хорошо, что у вас больше не возникает icky чувство, которое вы получаете, когда делаете такие вещи (SET views = views + 1 и другие записи на каждой странице view) с реляционной базой данных.

Вот пример использования Redis для хранения данных, необходимых для отслеживания активности пользователя, в том числе сохранение упорядоченный набор последних видел пользователей до настоящего времени, в Python:

def seen_user(user, doing, item=None): 
    """ 
    Stores what a User was doing when they were last seen and updates 
    their last seen time in the active users sorted set. 
    """ 
    last_seen = int(time.mktime(datetime.datetime.now().timetuple())) 
    redis.zadd(ACTIVE_USERS, user.pk, last_seen) 
    redis.setnx(USER_USERNAME % user.pk, user.username) 
    redis.set(USER_LAST_SEEN % user.pk, last_seen) 
    if item: 
     doing = '%s <a href="%s">%s</a>' % (
      doing, item.get_absolute_url(), escape(str(item))) 
    redis.set(USER_DOING % user.pk, doing) 
3

Если вы не против SQL но хотите сохранить db в памяти, вы можете проверить sqlite (см. http://www.sqlite.org/inmemorydb.html).

Если вы не хотите sql, и у вас действительно есть только пары с ключом, почему бы просто не хранить их в карте/хеше/ассоциативном массиве и не делать с ним?

2

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

2

Еще одна база данных: Berkeley DB. Berkeley DB позволяет вам настроить базу данных в памяти, на диске или и то, и другое. Он поддерживает как ключ-значение (NoSQL), так и SQL API. Berkeley DB часто используется в сочетании с веб-приложениями, поскольку он встроен, легко развертывается (он развертывается с вашим приложением), очень настраиваемый и очень надежный.Есть несколько веб-сайтов e-Retail, которые полагаются на Berkeley DB для своих приложений электронной коммерции, включая Amazon.com.

+2

Вы должны раскрыть свои отношения с BDB в этом ответе. – user7116

+1

Еще одна проблема с BerkeleyDB - это лицензия AGPL, то есть если вы хотите использовать ее в своем приложении, вы должны либо приобрести проприетарную лицензию, либо использовать приложение с открытым исходным кодом. – user1876508

0

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

Как правило, при условии, что вы можете осколочно, и ваши шаблоны доступа к данным просты и не мутируют слишком много, вы выбираете Redis. Если вы ищете что-то более надежное и поддерживающее более продвинутые шаблоны доступа к данным, Tarantool является хорошим вариантом.

0

Пожалуйста, проверьте следующее:

http://www.mongodb.org/

Ее действительно хорошая база данных No-SQL с драйверами и поддержкой всех основных языков.

Смежные вопросы