Tag: nosql

ElasticSearch仅返回具有不同值的文档

假设我有这个给定的数据 { “name” : “ABC”, “favorite_cars” : [ “ferrari”,”toyota” ] }, { “name” : “ABC”, “favorite_cars” : [ “ferrari”,”toyota” ] }, { “name” : “GEORGE”, “favorite_cars” : [ “honda”,”Hyundae” ] } 每当我在搜索最喜欢的汽车是丰田的人时查询这些数据,它就会返回这些数据 { “name” : “ABC”, “favorite_cars” : [ “ferrari”,”toyota” ] }, { “name” : “ABC”, “favorite_cars” : [ “ferrari”,”toyota” ] } 结果是两个名称为ABC的记录。 如何仅选择不同的文档? 我想得到的结果只是这个 […]

哪个用Java编写的嵌入式数据库用于简单的键/值存储?

我最近问过一个关于Neo4j的问题,我开始工作,看起来不错。 它是嵌入式的,它是用Java编写的,并没有(太多)依赖项。 然而,这是一个图形数据库,我不知道将它用作简单的键/值存储是否是一个好主意。 基本上我有一张大地图,在Java中看起来像这样: Map<Integer,Map> 我在主地图中有几千万个条目,每个条目都包含一个属性/值的映射。 “内部”地图相对较小:约20个条目。 我需要一种方法来保持从运行webapp到另一个的映射。 使用Neo4j,我所做的是为每个ID(整数)创建一个节点,然后为内部映射中的每个条目放置一个属性。 从我早期的测试看起来似乎有效,但我不确定这是一个很好的方法。 用Java编写的哪个可嵌入数据库会用到吗? 要求是: 用Java编写 可嵌入(所以没有太大) 不是 SQL(*) 开源 易于备份(我需要能够在服务器运行时进行“实时”备份) 我的术语也可能有点不对,所以请随时帮助我/纠正我。 对于我的“地图地图”,最合适的是键/值对DB吗? 由于键/值对DB,文档DB,大表,图形DB等之间的区别,我有点迷失。 我也很喜欢使用像Neo4J这样的图形数据库来满足我的需求(我认为性能确实不会是一个问题,因为我会看到相对少量的条目)。 当然我可以自己坚持我的地图地图,但我真的不想在这里重新发明任何轮子。 我想重用一个久经考验的DB …… (*)我不想要SQL的原因是我总是会有这个“地图图”,内部地图会不断发展,所以我不想要太结构化的东西。

在MySQL上使用NoSQL数据库

我有一个在Java堆栈上运行的Web应用程序(Struts 2 + Spring + Hibernate)并且在MySQL中持久存在。 我查看了NoSQL数据库,它们比RDBMS更容易推理和使用。 这是一个音乐流媒体应用程序,存储艺术家信息,并允许用户保存播放列表。 我想知道切换到NoSQL DB(CouchDB?,MongoDB?,Cassandra?)是否有任何优势(性能?,硬件成本?,简化代码?,可扩展性?)。 切换到NoSQL数据库会给您带来什么损失? 请指教。

选择分布式共享内存解决方案

我有一项任务是为大规模可扩展的分布式共享内存(DSM)应用程序构建原型。 原型只能作为概念validation,但我希望通过选择稍后将在真实解决方案中使用的组件来最有效地利用我的时间。 此解决方案的目的是从外部源获取数据输入,进行流失并使结果可用于许多前端。 那些“前端”只会从缓存中获取数据并在没有额外处理的情况下提供服务。 此数据的前端点击量实际上可以达到每秒数百万。 数据本身非常不稳定; 它可以(而且确实)变化很快。 然而,在最新的处理和缓存之前,前端应该看到“旧”数据。 处理和写入由单个(冗余)节点完成,而其他节点仅读取数据。 换句话说:没有直读行为。 我正在寻找像memcached这样的解决方案,但是这个特殊的解决方案并不能满足我们下面列出的所有要求: 该解决方案至少必须具有相当好的维护的Java客户端API ,因为应用程序的其余部分是用Java编写的,而且我们是经验丰富的Java开发人员; 解决方案必须是完全弹性的 :应该可以添加新节点而无需重新启动集群中的其他节点; 解决方案必须能够处理故障转移 。 是的,我意识到这意味着一些开销,但整体服务的数据大小并不大(最大1G)所以这应该不是问题。 “故障转移”是指在节点出现故障时无需硬编码/更改服务器IP地址(如memcached客户端)的无缝执行; 理想情况下,应该可以指定数据重叠程度(例如,应该在DSM集群中存储多少份相同数据的副本); 不需要永久存储所有数据,但可能需要对某些数据进行后处理(例如,序列化到DB)。 价格 。 显然我们更喜欢免费/开源,但如果解决方案值得,我们很乐意支付合理的金额。 无论如何,支付24小时/天的支持合同是必须的。 整个事情必须在我们的数据中心托管,因此像Amazon SimpleDB这样的SaaS产品超出了范围。 如果没有其他选择,我们只考虑这个。 理想情况下,解决方案将严格一致 (如CAP); 但是, 最终的一致性可以被视为一种选择。 提前感谢任何想法。

Jackson使用mixins以动态不同的名称序列化属性

我使用不同的NoSQL数据库,根据数据库,我需要将“id”命名为不同。 例如在OrientDB ,id被命名为“@rid” @JsonProperty(“@rid”) private String id; 对于MongoDB,id被命名为“_id” @JsonProperty(“@_id”) private String id; 我不知道现代数据库开发人员有什么问题,不只是命名id字段“id”^^。 但现在我有一个问题。 如何在某些情况下动态序列化/反序列化id字段为“@rid”,在另一种情况下为“_id”? 编辑: 基于rmullers建议我尝试使用mixins。 所以我举个例子: public interface IdMixins { } public interface MongoIdMixIn extends IdMixins { @JsonProperty(“_id”) String getId(); @JsonProperty(“_id”) void setId(String id); } public interface OrientIdMixIn extends IdMixins{ @JsonProperty(“@rid”) String getId(); @JsonProperty(“@rid”) void setId(String id); } 其中IdMixins是一个完全空的接口,用于获得更多的控制,哪些接口可以传递给映射器。 然后是一堂课: @JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property=”@javaClass”) […]

在mongodb集合中查找一些值?

我试图用java读取(mongo)用户数据库。 在教程页面上,我看到了如何阅读整个集合。 我可以这样做: DBCursor cursor = col.find(); while (cursor.hasNext()) { System.out.println(cursor.next()); } 现在,如果我有一个用户集合:=姓名,年龄,密码(…)等等。 现在我想找一个带密码的名字。 例如,对于登录过程。 假设我有两个字符串:String n和p。 如果数据库中有user.equals(n)和password.equals(p),则登录用户。 我该如何更换光标? 我在mongodb java教程页面上看到了一些查询示例,但是我真的不明白…… 有任何想法吗? 谢谢

在mongodb中读取数组?

嗨我在mongodb中的数组有些麻烦。 使用java读取文档没有问题,但是读取数组文档中的内容是个问题。 可以说我有一个集合myCol: {“name”: “lenny linux”, “gender”: “m”, “computers”: [{“name”: “computer”}, {“name”: “computer2”} {“name”…}]} 所以有一个带计算机的arrays。 我可以阅读整个文件 DBCollection myCol = getCollection(…); BasicDBObject query = new BasicDBObject(); query.put(name, “lenny linux”); DBCursor cursor = myCol.find(query); while (cursor.hasNext()) { System.out.print(cursor.next()); } 但我只需要计算机的名称,所以我必须以某种方式阅读数组。 不要在mongodb中获得这个数组的东西。 如果我想从mongodb数组中删除一些内容呢? 它与删除普通文件不一样…谢谢你的帮助! 编辑:如果我正在阅读mongodb页面: http : //www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ValueinanArray我真的不明白。 他们有一系列的颜色,然后他们像这样读红色: db.things.find({ colors :”red” }); 我为什么要这样做? 如果我想读取数组以了解数组中的内容。 用户不知道有“红色”或蓝色或其他什么。 也许数组颜色是空的? 然后我得到一个零,0或其他什么,如果有4种颜色然后给我这些颜色,打印出来。 […]

Aerospike:我如何获得记录密钥?

Aerospike客户端具有scanAll方法,用于从其商店中读取所有行。 我在下面的代码中使用它: ScanPolicy policy = new ScanPolicy(); policy.concurrentNodes = true; policy.priority = Priority.DEFAULT; policy.includeBinData = true; policy.scanPercent = 100; client.scanAll(policy, “namespaceName”, “setName”, new ScanCallback() { @Override public void scanCallback(Key key, Record record) throws AerospikeException { STORE.put(key.userKey.toLong(), record.getValue(“binName”).toString()); } }); 但它完成了NullPointerException ,因为userKey为null。 所有其他字段均按预期有效。 用户密钥是Long值,用于保存数据: client.put(writePolicy, new Key(“namespaceName”, “setName”, userKey), new Bin(“binName”, value)); 一切都很好,如果我做这样的单一请求: client.get(readPolicy, new Key(“namespaceName”, […]

MongoDb通过jndi

你知道是否有可能像jndi的数据源一样在spring中设置mongodb实例? 谢谢

键值商店建议

我需要一个非常基本的java键值存储。 我从一个HashMap开始,但似乎HashMap有点空间效率低(我存储了大约2000万条记录,而且似乎需要~6GB RAM)。 映射是Map ,因此我正在考虑使用GNU Trove TIntObjectHashMap ,并将映射值存储为ascii字节数组而不是String。 作为替代方案,是否有一个键值存储只需要添加jar文件,不会立即将整个映射保存在RAM中,并且仍然相当快?