性能测试

最近工作中需要用elasticsearch来建立全文检索,对同时建立大量索引的性能有较大要求,于是便在公司的mac mini上做了简单的测试,测试环境如下:

  1. 所有elastcisearch的数据都保存在同一个索引和类型下

  2. 测试的时间为cpu时间

  3. 数据库中的数据保存在sqllite中

  4. 测试数据数量为30万,测试了100次

  5. elasticsearch版本号为2.3.3在本地运行

首先在数据库创建了名为record的表,其中保存了30万条如下所示的数据

    record: {"content": "Iste aut praesentium atque. Laboriosam aliqui voluptatibus dolorum fugiat veniam perferendis. Aspernatur nam ullam quibusdam sit dolorem architecto dolores.","title": "Jessica Martinez"}

测试得到的时间:

  • 获取数据库中的全部相对应数据并保存为指定的字典格式时间为4.272秒

  • 在elasticsearch中建立全部索引的时间为19.7170秒

之后还测试了在elasticserch中添加一个新字段所需的时间,该字段如下所示

{data = '飓风鲍勃是一场于1985年7月影响了美国东南部的飓风,也是1985年大西洋飓风季的第2场热带风暴和首场飓风,于7月21日由墨西哥湾东部的一股东风波发展而成。系统起初向东移动,以弱热带风暴强度袭击佛罗里达州西南部,接下来转向北上并迅速增强,于7月24日达到飓风强度。次日,鲍勃在南卡罗莱纳州博福特附近登陆,成为这年飓风季吹袭美国的首场飓风。气旋在陆地上空迅速减弱,于7月26日被西弗吉尼亚州东部上空的一片锋面槽吸收。鲍勃一共间接导致5人遇难,经济损失达到2000万美元。风暴给佛罗里达州带去暴雨,降雨量最高的大沼泽地市达508毫米。不过,这些降水缓解了许多地方持续已久的干旱,所以对大部分地区都是有利的。飓风最后一次登陆是在南卡罗莱纳州,当地所受影响很小,但气旋在弗吉尼亚州催生了3场龙卷风,其中1场摧毁了两套房屋。'}

测试得到的时间

  • 获取数据库中的全部相对应数据并保存为指定的字典格式时间的时间是4.161831秒

  • 将新添字段数据转化到elasticsearch的保存格式的时间为22.394504秒

从上面的数据可以看出,为已存在的索引添加一个字段信息可能会比创建全部索引所花的时间还要多,这是由于elasticsearch文档的不可变性,update其实是经历了检索-修改-重建索引的过程,具体可参考elasticsearh权威指南的相关章节

下面时测试用的程序,跑了好久好久。。。

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ela.settings")import time
from elasticsearch.helpers import bulk, reindex
from elasticsearch import Elasticsearch
from elastic.models import Record
from elasticsearch.client import IndicesClientes = Elasticsearch()
indice = IndicesClient(es)
update_list = list()
transfer_list1 = list()
transfer_list2 = list()
elas_list = list()
map_list = list()for count in range(1, 100):indice.create(index='ding_test')start_time1 = time.clock()record = Record.objects.all().iterator()actions = []for data in record:s = {'_op_type': 'create','_type': 'million','_index': 'ding_test','_id': data.id,'_source': {'title': data.title, 'content': data.content}}actions.append(s)end_time1 = time.clock()if len(actions) > 0:bulk(es, actions)final_time1 = time.clock()transfer_time1 = end_time1 - start_time1elas_time1 = final_time1 - end_time1transfer_list1.append(transfer_time1)elas_list.append(elas_time1)s = {'million': {'properties': {'data': {'type': 'string'}}}}start_time2 = time.clock()res = indice.put_mapping(doc_type='million', index='ding_test', body=s)end_time2 = time.clock()map_time = end_time2 - start_time2map_list.append(map_time)start_time3 = time.clock()record = Record.objects.all().iterator()actions = []for data in record:s = {'_op_type': 'update','_type': 'million','_index': 'ding_test','_id': data.id,'doc': {'data': data.data}}actions.append(s)end_time3 = time.clock()transfer_time2 = end_time3 - start_time3transfer_list2.append(transfer_time2)start_time4 = time.clock()if len(actions) > 0:bulk(es, actions)end_time4 = time.clock()update_time = end_time4 - start_time4update_list.append(update_time)indice.delete(index='ding_test')print 'this is the %s try, fighting' % countprint 'build_index_dict_time_avg:%s' % (sum(transfer_list1)/len(transfer_list1))
print 'build_index_elas_time_avg:%s' % (sum(elas_list)/len(elas_list))
print 'elas_put_mapping_time_avg:%s' % (sum(map_list)/len(map_list))
print 'update_dict_time_avg:%s' % (sum(transfer_list2)/len(transfer_list2))
print 'update_index_elas_time_avg:%s' % (sum(update_list)/len(update_list))

为应用添加新功能的思路:

  1. 仔细研究需求,包括所要实现的功能,运行的效率要求等!!

  2. 查找能实现这个需求的轮子和实现,还是自己造个轮子

  3. 做一个简单的demo来测试(顺便可以学习怎么用这个轮子)

  4. 通过测试权衡如何将功能集成到现有代码

  5. 开始撸代码吧^-^

elasticsearch的性能表现相关推荐

  1. 如何改善虚幻引擎中的游戏线程CPU性能表现

    您游戏中的帧频率是不是太低? 您了解为什么会发生这种现象吗? 这是不是由于您同时生成了太多敌人?还是由于某个特定敌人过于消耗系统资源? 是由于您设置了过多的视觉特效,还是由于您所设计的战斗系统所造成的 ...

  2. Reporting Services 的伸缩性和性能表现规划(转载)

    简介 Microsoft? SQL Server? Reporting Services 是一个将集中管理的报告服务器具有的伸缩性和易管理性与基于 Web 和桌面的报告交付手段集于一身的报告平台.Re ...

  3. 【全观测系列】Elasticsearch应用性能监控实践

    简介:本文介绍了应用性能监控的应用价值以及解决方案等. 1.什么是全观测? 要了解全观测,我们先看看传统运维存在哪些问题. 数据孤岛,分散在不同部门,分析排查故障困难: 多个厂商的多种工具,无法自动化 ...

  4. 断点帧数测试软件,《幽灵行动:断点》PC版性能表现分析

    <幽灵行动:断点>是系列最新作品,本作采用AnvilNext 2.0引擎,外媒DSOGaming今天评测了它在PC上的性能表现. 以下是文章全文: 本次PC性能测试分析我们使用的是Inte ...

  5. 【Elasticsearch】es Elasticsearch 聚合性能优化六大猛招

    1.概述 参考:Elasticsearch 聚合性能优化六大猛招

  6. e5 2630v4 php性能,至强E5 V4性能表现测试

    至强E5 V4性能表现测试 在测试方面,CPU性能上采用CineBench 15.SiSoftware Sandra测试软件. CineBench 15测试 CineBench 15新版本最为显着的改 ...

  7. 文件系统在NVMe SSD上的性能表现分析

    文件系统是访问存储的一种常用方式,目前常用的文件系统都是针对磁盘的特性进行设计的.例如,为了解决磁盘随机小数据访问的问题,在文件系统层面引入了Page cache机制,利用内存缓存对这种访问进行加速. ...

  8. 不同CPU的MATLAB性能表现的简单对比方法

    MATLAB性能表现 小结:程序不同,无法一概而论.可以分为两部分:1.多线程,2.浮点数.[好像说了一堆众所周知的废话] 参考网址 https://www.mathworks.com/support ...

  9. 看门狗性能软件测试,《看门狗:军团》PC版性能表现分析

    <看门狗:军团>是首款同时登陆本世代和次世代平台的育碧游戏.外媒DSOGaming今日发布了<看门狗:军团>的PC版性能表现分析结果,一起来看看这款游戏的表现如何吧. 全文如下 ...

  10. 联想微型计算机c325参数,联想一体机c325性能表现 联想一体机c325配置参数

    联想C325-触摸型一体电脑采用了AMD Fusion APU E-450处理器,配备2GB内存,500GB硬盘,AMD Radeon HD 6320集成显卡,性能表现不错.近日,小编在宁波腾远电脑了 ...

最新文章

  1. python简单代码表白-如何正确使用Python进行表白
  2. Bootstrap4 .ml-auto元素居右.mr-auto元素居左
  3. java并发编程之Semaphore
  4. 类的6个默认成员函数:构造函数、析构函数、拷贝构造函数、重载运算符、三/五法则
  5. 【Python】汉诺塔问题
  6. 17.立体匹配——更好的效果与挑战,总结_5
  7. kingcms的标签
  8. Spring如何配置bean属性
  9. Arduino uno LED灯实验
  10. AVI视频文件编码格式不受支持0xc00d5212怎么解决?
  11. 证明:二阶导函数大于零时为凹函数
  12. sap 双ALV联动显示示例(备份)
  13. hdu 5145 NPY and girls (莫队算法)
  14. 阿里云服务器搭建JAVA环境详解(jdk+mysql+tomcat)
  15. 时钟周期是干什么的?底层原理是什么?
  16. python二级操作题分值_计算机二级MS Office考试具体内容及分值
  17. photoshop二次开发python_PhotoShop工具开发之Python(二)
  18. 老闪创业那些事儿(外传)——流程下的工具人
  19. C语言——日期转换为天数
  20. np.ceil的用法

热门文章

  1. Python2.7学习笔记-定义函数、filter/map/reduce/lambda
  2. 图片文字混排的垂直居中、inline-block块元素和行内元素混排的垂直居中问题
  3. 为什么调用支付宝接口后返回是错误页面!
  4. 【msdn】配置 ReportViewer 以进行远程处理
  5. lsb_release -a linux查看版本未找到命令
  6. maven简单了解,没有Maven和使用Maven的区别
  7. LOJ2001 SDOI2017 树点涂色 LCT、线段树
  8. 读EntityFramework.DynamicFilters源码_心得_示例演示02
  9. 引用com.sencha.gxt.ui.GXT加载错误解决方案
  10. 使用Reflexil修改类库