我用python来测试龙卷风异步性能发送的性能。我的代码如下。然后我使用 ab 工具(apache benchmark)来测试性能。 我得到插入操作的性能比读取操作更好。为什么?
插入操作: Requests per second: 1323.44 [#/sec] (mean)
读取操作: Requests per second: 352.08 [#/sec] (mean)
=代码===
=======import asyncmongo
client = asyncmongo.Client("pool1",host = '127.0.0.1', port = 27017, dbname='testdb')
import tornado.web
import tornado.httpserver
import tornado.ioloop
class InsertHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
def get(self):
friends = client.connection('friends')
friends.insert( {"AsyncInsert":1},callback=self.on_writen)
def on_writen(self,response,error):
self.write("Async insert ~ !")
self.finish()
class ReadHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
def get(self):
friends = client.connection('friends')
friends.find_one( {'AsyncInsert':1}, callback=self.on_read)
def on_read(self,response,error):
self.write("Async read ~ !")
self.finish()
if __name__ == "__main__":
app = tornado.web.Application([(r'/insert/',InsertHandler),(r'/',ReadHandler)])
server = tornado.httpserver.HTTPServer(app)
server.listen(9005)
tornado.ioloop.IOLoop.instance().start()
MongoDB写入操作性能取决于许多因素,例如使用的索引量或更新时的文档增长。
请务必注意,MongoDB 驱动程序的插入调用的持续时间在很大程度上取决于所选的写入关注点(忽略错误、未确认错误、已确认错误、已记录错误、副本确认错误)。如果使用"错误被忽略"或"未确认",驱动程序将发送写入操作而不进行任何确认。这些写入比确认写入快得多,至少在驱动程序的方法持续时间方面是这样。请注意,所有官方驱动程序中都有默认的写入关注点更改。
在您的特定情况下,我猜您正在使用未确认的写入问题。运行类似的代码,我得到以下结果:
插入未确认的写入:Requests per second: 1373.51 [#/sec] (mean)
插入并确认写入:Requests per second: 619.33 [#/sec] (mean)
阅读:Requests per second: 740.99 [#/sec] (mean)