我正在努力最终确定我们的应用程序需要使用的缓存层。目前我们已经入围了 2 个 Redis 和 Mongodb。我不确定使用哪一个作为缓存。因此,我想到对两者进行性能测试,然后根据结果进行比较。
现在,我已经阅读了很多关于各自优点的文章,看起来推荐的方法是使用 Mongodb 作为数据存储层,使用 Redis 作为缓存层,它位于 Web 应用程序的前面,以避免请求到达源站。
我在下面分享了结果。
但根据我的性能结果,redis 的性能与 mongodb 相差甚远。那么我们可以有把握地说 mongodb 是比 redis 更好的缓存选择吗?
请告诉我你们的想法。另外,我不是 Redis 或 mongodb 方面的专家,所以如果我在 Redis 或 mongodb 中做错了什么,请告诉我。
我可以修复并再次重做测试。
主机配置:
Redis 版本:3.2.1(Windows 64 位版本) Mongo 版本:3.2.5(Windows 64 位版本)
Redis.java
package com.redis.mogo.perftest;
import redis.clients.jedis.Jedis;
public class RedisJava {
public static void main(String args[]) {
Jedis jedis = new Jedis("localhost");
System.out.println("Connection to server sucessfully");
System.out.println("Server is running: "+jedis.ping());
int …Run Code Online (Sandbox Code Playgroud) 我在 mongo db 集合上使用 java(不是 spring)工作。我想在一个事务中执行一些更新操作,因此将执行所有操作或不执行任何操作。
我没有找到任何关于如何完成的简单示例。我知道它与 mongo db 中的会话有关,但是如何创建此会话?如果有人在 Java 中有此场景的示例,我将不胜感激,如果他能分享。
谢谢,奥斯纳特。
我是mongodb的新手,并试图将其用于开发.我有一个概念模型:
User = {"uid":"","services":"[
{
"serviceid":"sid",
"sub_dat":"somedate",
"exp_date":"somedate",
},
{
"serviceid":"sid",
"sub_dat":"somedate",
"exp_date":"somedate",
},
{
"serviceid":"sid",
"sub_dat":"somedate",
"exp_date":"somedate ",
},
]",
"friends":"[
{
"friend_id":"",
"friendname":"name"
"friendshipyrs":"yrs",
},
{
"friend_id":"",
"friendname":"name"
"friendshipyrs":"yrs"
},
],",}
我想知道java中使用原始驱动程序而不是morphia来遵循的步骤:1.创建此对象,以便我能够:2.获取并将新服务和朋友附加到服务列表.
我现在可以添加到顶层,我尝试使用BasicDBObject,DBList,甚至是ObjectBUilder但是无法弄清楚如何追加或推入字段以使用java驱动程序创建数组/列表,如可以从10gen网站上的演示文稿.
此外,希望能够通过单个查询向下钻取说...朋友信息,那么建议维护上述结构或创建朋友作为类并将类对象放在列表中是可取的吗?我知道点运算符,但我不知道如何通过java驱动程序访问类字段.
对任何帮助都会非常感激...谢谢
我想在每次查询时记录查询时间.
我在playframework上使用mongodb.简单地说,我认为要减去开始和结束时间.对于ex:
a=currenttime();
madequert();
querytime=currenttime()-a;
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法?
我有这样的架构设置:
{
_id:1234,
friends: [
{
"fid":1235
"is_user":true
},
{
"fid":1236
"is_user":true
},
{
"fid":1235
"is_user":false
}
]
}
Run Code Online (Sandbox Code Playgroud)
我的要求是,给定一个_id,我需要找到所有的朋友IDS (fid)谁已is_user设置为true.
我尝试了以下方法:
db.users.find({ friends: { $elemMatch : { is_app_user: true}}});
Run Code Online (Sandbox Code Playgroud)
似乎在整个系列中给我回复结果,但我想要它用于ID.所以我试过这个:
db.users.find({_id:1234},{friends: { $elemMatch : { is_app_user: true}}});
Run Code Online (Sandbox Code Playgroud)
但这没有给我什么.而且,我所需要的只是fid.有人可以帮我解决这个问题吗?
我在我的代码中调用MongoDB聚合函数:
AggregationOutput output = collection.aggregate( matchUserID, unwindF, matchFUsers,projection);
Run Code Online (Sandbox Code Playgroud)
我在我的localhost中测试了我的代码,它完美无缺.当我在另一个DB(版本2.2.1)中使用相同的时,它会出现此错误:
com.mongodb.CommandResult$CommandFailure: command failed [aggregate]: { "serverUsed" : "<server address>" , "errmsg" : "no such cmd: aggregate" , "bad cmd" : { "aggregate" : .... }
Run Code Online (Sandbox Code Playgroud)
有什么线索的原因?
Spring MongoDb仍然坚持使用mongo客户端的2.10版本.
是否可以使用更新版本的mongo驱动程序与spring mongodb或会破坏什么?
我有一个带有数组字段的文档
"chapters": [
{ "id" : "14031871223912313", ...}
...
]
Run Code Online (Sandbox Code Playgroud)
我想使用以下命令查询使用Spring Data的MongoTemplate返回id:
class Chapter {
private String id;
public String getId() {
return id;
}
}
Run Code Online (Sandbox Code Playgroud)
这样就不会填充id.我尝试使用@Field中描述的不同映射选项http://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#mapping.conventions.id-field
我究竟做错了什么?我知道我总是可以回到mongo java驱动程序,但我认为这应该工作.
在此先感谢您的帮助.
我试图从文档中检索一个字段并将其设置为一个变量,所以当我稍后更新它时,我可以做(字段+ newCount)或类似的东西.
例如我的文件是:
{
"username":"testusername"
"item":"Sofa"
"price":150.0
}
Run Code Online (Sandbox Code Playgroud)
如何检索价格字段并将其设置为等于让我们说double currentPrice;?
文档有点模棱两可,所以一个例子会有所帮助.
另外,我使用的是mongoDB Java 3.0.2版
谢谢
编辑:显然问题有点模糊,但我试图检索存储在数据库中的沙发的价格,并将其设置为等于我的java代码中的变量.
所以,我想设置它以使double currentPrice = 150.0;
那么如何使用java代码访问项目的价格并将其设置为变量?
所以我的代码是:
FindIterable<Document> findIterable = collection.find().skip(20).limit(10);
MongoCursor<Document> cursor = findIterable.iterator();
while (cursor.hasNext()) {
Document doc = cursor.next();
// My stuff with documents here
}
cursor.close(); // in finally block
Run Code Online (Sandbox Code Playgroud)
现在我想知道total count之前skip和之前的文件limit.
对于完全相同的问题有一个答案,但我mongo-java-driver v3.1.0和我使用的API是不同的.有没有方法count()或size()在这两个FindIterable和MongoCursor类.谢谢!
UPDATE
似乎唯一的解决方法是再次打电话给mongodb:collection.count正如@Philipp所说