【发布时间】:2013-12-04 23:22:57
【问题描述】:
我正在研究不同的 nosql 缓存/数据库。
以下性能测试是使用 C# mongo 驱动程序 1.8.3.9 和 ServiceStack.Redis 3.9.57.0 完成的。
MongoDB 2.4
Redis 2.6.16
private List<string> GetListStrings()
{
var list = new List<string>(count);
for (int i = 0; i < count; i++)
{
list.Add(Guid.NewGuid().ToString());
}
return list;
}
Mongo 测试方法
public class TestStrings
{
[BsonId]
public ObjectId Id { get; set; }
public string[] List { get; set; }
}
public void SendIdsMongo()
{
var idsEntity = new TestStrings
{
List = GetListStrings().ToArray()
};
var client = new MongoClient(mongoConnectionString);
MongoServer server = client.GetServer();
MongoDatabase database = server.GetDatabase("newdb");
var col = database.GetCollection("l2");
Utils.TimeLog("Insert", () =>
{
col.Insert(idsEntity, WriteConcern.Acknowledged);
});
Utils.TimeLog("FindOneByIdAs", () =>
{
var ret = col.FindOneByIdAs<TestStrings>(idsEntity.Id);
Console.Write(ret.List.Length);
});
}
Redis 测试方法
[TestMethod]
public void SendIdsRedis()
{
var key = Guid.NewGuid().ToString();
var list = GetListStrings();
using (var redisClient = manager.GetClient())
{
Utils.TimeLog("AddRangeToList", () => redisClient.AddRangeToList(key, list));
Utils.TimeLog("GetRangeFromList", () =>
{
var ret = redisClient.GetAllItemsFromList(key);
Console.WriteLine(ret.Count);
});
}
}
当我将 10000 个项目列表插入两者时,我得到了
Mongo:0.27 写入,0.031 读取
Redis:0.26 写入,0.013 读取
现在我正在尝试同时旋转 100 个线程
var results = new TimeSpan[tasksCount];
Utils.TimeLog("total: ", () =>
{
Parallel.For(0, tasksCount, x =>
{
Stopwatch stopwatch = Stopwatch.StartNew();
SendIdsRedis(); //SendIdsMongo()
stopwatch.Stop();
results[x] = stopwatch.Elapsed;
});
});
Console.WriteLine("avg: " + results.Aggregate((a, b) => a + b).TotalSeconds / tasksCount);
我得到的结果令人惊讶。
蒙哥: 总计: : 2.5217096 平均:0.210511518
Redis: 总计: : 17.249888 平均:2.275050013
在我的测试中,Mongo 在并发请求很多时似乎比 Redis 快得多。我添加的线程越多,差距就越大。根据我阅读的内容,我期待不同的结果。为什么?
两者都在同一个虚拟机上运行
CentOS 6.4 Intel(R) Core(TM) i7-2860QM CPU @ 2.50GHz
4Gb 内存
【问题讨论】:
标签: c# performance mongodb redis