6月30日更新
这个问题使基准测试更加清晰,Mythz发现了一个问题并解决了它:
ServiceStack benchmark continued: why does persisting a simple (complex) to JSON slow down SELECTs?
写/读速度合理吗?
在我试用OrmLite时,我将测试如何将所有当前数据/对象从我们自己的实现转换为保存到数据库,并切换到OrmLite。
我做的测试是使用Customer类,它有一系列属性(在我们的产品中使用,所以在我们当前的版本中每天都使用这个类)。
如果我创建10000个这样的对象,然后测量将这些对象持久化到MySql数据库(序列化+写入db)所需的时间,结果是:
更新
由于“当前实现”是欺骗(它只是将一个字节[]填充到数据库),我实现了一个简单的RelationDbHandler,它用一个简单的SQL查询以正常的方式持久化10000个对象。结果添加到下面。
OrmLite(使用.Save):94秒
读取10000个对象:
OrmLite(使用Select<>):28秒
我在本地运行它,在SSD磁盘上,CPU或磁盘上没有其他负载。
我在ServiceStack网页上读到了一些基准测试的东西(
https://github.com/ServiceStack/ServiceStack/wiki/Real-world-performance
),但大部分链接区域已死亡。有人说读25000行需要245ms,但我不知道一行是什么样子。
问题1:有什么基准我可以阅读更多?
问题2:下面指定了客户对象。mythz认为上面的写/读时间合理吗?
测试用例:
public void MyTestMethod<T>(T coreObject) where T : CoreObject
{
long id = 0;
using (var _db = _dbFactory.Open())
{
id = _db.Insert<T>(coreObject, selectIdentity: true);
}
}
从表中读取所有内容的代码:
internal List<T> FetchAll<T>()
{
using (var _db = _dbFactory.Open())
{
List<T> list = _db.Select<T>();
return list;
}
}