5

我想删除我在(几乎)Web应用程序上的每个请求上加载的小块数据的sql依赖。大多数数据是键值/文档结构,但不排除关系解决方案。数据不是太大,所以我想把它保存在内存中以获得更高的可用性。

你会推荐什么解决方案?

4

8 回答 8

6

最简单且使用最广泛的内存键值存储是MemcacheD。介绍页面重申了您的要求:

Memcached 是一种内存键值存储,用于存储来自数据库调用、API 调用或页面渲染结果的任意数据(字符串、对象)的小块。

客户名单令人印象深刻。已经很久了。好的文档。它具有几乎所有编程语言的 API。水平缩放非常简单。根据我的经验,Memcached 很好。

您可能还想查看MemBase

于 2011-03-06T09:48:26.747 回答
6

Redis非常适合这种数据。它还支持一些基本的数据结构并提供对它们的操作。

我最近将我的 Django 论坛应用程序转换为将它用于所有实时/跟踪数据——当你SET views = views + 1用关系做这种事情(以及每个页面视图上的其他内容)时,不再有恶心的感觉真是太好了数据库。

下面是一个使用 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)
于 2011-03-06T09:50:47.430 回答
3

如果您不介意 sql 但想将数据库保留在内存中,您可能需要查看 sqlite(请参阅http://www.sqlite.org/inmemorydb.html)。

如果您不想要 sql 并且您实际上只有键值对,为什么不将它们存储在 map/hash/associative 数组中并完成它呢?

于 2011-03-06T09:50:52.120 回答
2

如果你最终需要一个内存数据库,H2是一个非常好的选择。

于 2011-03-06T10:04:39.173 回答
2

另一个要考虑的数据库:Berkeley DB。Berkeley DB 允许您将数据库配置为内存、磁盘或两者。它同时支持键值 (NoSQL) 和 SQL API。Berkeley DB 经常与 Web 应用程序结合使用,因为它是嵌入式的、易于部署(随应用程序一起部署)、高度可配置且非常可靠。有几个电子商务网站依赖于 Berkeley DB 的电子商务应用程序,包括 Amazon.com。

于 2011-03-08T20:12:05.247 回答
1

我不确定这是否是您正在寻找的,但您应该研究一个缓存框架(可能包含在您现在使用的工具中的东西)。使用存储库模式,您要求提供数据,然后您可以通过密钥检查它是否在缓存中。我没有,你从数据库中获取它,如果你这样做,你从缓存中获取它。

这取决于您正在处理的数据类型,因此由您决定将数据保留在缓存中的时间。也许滑动超时是最好的,因为只要密钥一直被请求,您就会保留数据。这意味着如果缓存中有用户的数据,一旦用户离开,数据将从缓存中过期。

于 2011-03-06T09:50:42.610 回答
0

你能分片这些数据吗?数据访问模式是否简单稳定(不会随着业务需求的变化而变化)?这些数据有多重要(例如,会话上下文不太难恢复,而用户在设置页面上输入的某些首选项不应该丢失)?

通常,只要您可以分片并且您的数据访问模式简单且不会发生太多变化,您就会选择 Redis。如果您正在寻找更可靠并支持更高级数据访问模式的东西,Tarantool 是一个不错的选择。

于 2012-02-23T20:35:20.330 回答
0

请检查一下:

http://www.mongodb.org/

它是一个非常好的 No-SQL 数据库,带有驱动程序并支持所有主要语言。

于 2012-07-05T06:15:29.380 回答