【问题标题】:Remote key-value storage allowing indexes?允许索引的远程键值存储?
【发布时间】:2011-05-19 18:03:48
【问题描述】:

在我们的项目中,我们已经为对象嵌入了内存中的键值对存储,它非常有用,因为它允许我们为它创建索引并根据它查询存储。因此,如果我们有一个“Student”的集合,并且在 student.group 和 student.sex 上有一个复合索引,那么我们可以找到“ABC”组中的所有男学生。删除等也是如此。

现在我们必须采用我们的服务在云中工作,这样就会有多个服务器,处理用户请求,并且它们有一个共享状态,存储在这个键值索引存储中。我们尝试采用 memcashed 来满足我们的需求,它几乎是理想的——它是快速、简单且经过验证的解决方案,但它没有索引,因此我们不能习惯于搜索我们的临时数据。

有没有其他方法可以拥有远程缓存,就像 memcashed 一样,但带有索引?

谢谢。

【问题讨论】:

    标签: performance caching in-memory-database key-value-store


    【解决方案1】:

    试试hazelcast,它是一个内存数据网格,在服务器之间分配数据。您可以像在问题中描述的那样拥有索引并查询它们。

    用法很简单。只需添加 Hazelcast.jar 并开始编码。它既可以是嵌入式的,也可以是远程的。

    这里是索引和查询用法

    添加索引

    IMap<Integer, Student> myDistributedMap = Hazelcast.getMap("students")
    myDistributedMap.addIndex("group", false);
    myDistributedMap.addIndex("sex", false);
    

    存储在 imdg 中

    myDistributedMap.put(student.id, student)
    

    ;

    查询

    Collection<Student> result = myDistributedMap.values(new SqlPredicate("sex=male AND group=ABC"));
    

    最后它在云中运行良好。例如:EC2

    【讨论】:

    • 这很好,但它是 Java 绑定的吗?是否可以从不基于 jre 的东西中使用 hazelcast?
    • 目前 Hazelcast 支持 Java Client、Memcache 协议和 REST 接口。使用 REST 接口,您可以访问 Hazelcast。但是目前还没有足够的 REST 文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 2013-04-19
    • 1970-01-01
    相关资源
    最近更新 更多