Easysearch 性能测试方法概要
Easysearch • INFINI Labs 小助手 发表了文章 • 0 个评论 • 2735 次浏览 • 2024-08-23 14:47
INFINI Easysearch
INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 衍生自基于开源协议 Apache 2.0 的 Elasticsearch 7.10 版本,完善和支持更多的企业级功能,优化搜索业务场景,以保证更佳的数据探索与分析体验。
Easysearch 的主要特点:
- 兼容 Elasticsearch,业务代码无需改动;可平滑迁移
- 企业级安全;更稳定可靠
- 企业级管理后台(多集群统一管理,实现运营标准化、自动化)
- 信创适配(全面适配国产 CPU/OS/服务器,支持国密算法)
Easysearch 快速体验,请参阅:
[Easysearch,地表最强,没有之一!](https://mp.weixin.qq.com/s/6kLF713Tu2fmSV3JWu12kg)
Loadgen
Loadgen 是 Elasticsearch 专属压测工具,用来对 Easysearch 或者网关进行压力测试。
Loadgen 的特点:
- 性能强劲
- 轻量级无依赖
- 支持模板化参数随机
- 支持高并发
- 支持压测端均衡流量控制
- 支持服务端返回值校验
当前最新版本为 1.26.1-598,下载链接如下:
[https://release.infinilabs.com/loadgen/stable/](https://release.infinilabs.com/loadgen/stable/)
下载并解压安装包后,得到二进制文件。
查看版本信息。
sh<br /> $ ./loadgen-linux-amd64 -v<br /> __ ___ _ ___ ___ __ __<br /> / / /___\/_\ / \/ _ \ /__\/\ \ \<br /> / / // ///_\\ / /\ / /_\//_\ / \/ /<br /> / /__/ \_// _ \/ /_// /_\\//__/ /\ /<br /> \____|___/\_/ \_/___,'\____/\__/\_\ \/<br /> <br /> [LOADGEN] A http load generator and testing suite.<br /> [LOADGEN] 1.26.1#598, 2024-08-14 04:50:03, 2024-12-31 10:10:10, 00f15fd86834d7ea539f6d66ee608e3915eef0e3<br /> loadgen 1.26.1 598 2024-08-14 04:50:03 +0000 UTC 2024-12-31 10:10:10 +0000 UTC 00f15fd86834d7ea539f6d66ee608e3915eef0e3<br />
Loadgen 测试
Loadgen 使用非常简单,下面演示如何进行查询压测。
- 建立索引,根据节点数调节分片数。
sh<br /> curl -X PUT -H "Content-Type: application/json" \<br /> -ku admin:xxx "<a href="https://localhost:9200/loadtest"" rel="nofollow" target="_blank">https://localhost:9200/loadtest"</a> -d'<br /> {<br /> "settings":{<br /> "number_of_shards":"3",<br /> "number_of_replicas":1,<br /> "translog":{<br /> "durability":"async"<br /> }<br /> }<br /> }'<br /> {"acknowledged":true,"shards_acknowledged":true,"index":"loadtest"}<br />
- 创建
loadgen.dsl.shawnyan
配置文件,定义查询
sh<br /> GET loadtest/_search<br /> {"query": {"term": {"id.keyword": {"value": $[[id]]}}}}<br />
- 执行压测,
-d
表示秒数,-c
表示并发数。
sh<br /> $ ES_ENDPOINT=https://localhost:9200 ES_USERNAME=admin ES_PASSWORD=xxx ./loadgen-linux-amd64 -run loadgen.dsl.shawnyan -d 10 -c 2<br /> __ ___ _ ___ ___ __ __<br /> / / /___\/_\ / \/ _ \ /__\/\ \ \<br /> / / // ///_\\ / /\ / /_\//_\ / \/ /<br /> / /__/ \_// _ \/ /_// /_\\//__/ /\ /<br /> \____|___/\_/ \_/___,'\____/\__/\_\ \/<br /> <br /> [LOADGEN] A http load generator and testing suite.<br /> [LOADGEN] 1.26.1#598, 2024-08-14 04:50:03, 2024-12-31 10:10:10, 00f15fd86834d7ea539f6d66ee608e3915eef0e3<br /> [08-19 16:43:27] [INF] [env.go:179] configuration auto reload enabled<br /> [08-19 16:43:27] [INF] [app.go:285] initializing loadgen, pid: 30792<br /> [08-19 16:43:27] [INF] [app.go:286] using config: /data/es/loadgen.yml<br /> [08-19 16:43:27] [INF] [module.go:155] started plugin: statsd<br /> [08-19 16:43:27] [INF] [module.go:161] all modules are started<br /> [08-19 16:43:27] [INF] [instance.go:78] workspace: /data/es/data/loadgen/nodes/cr1gabqr90cng685o2s0<br /> [08-19 16:43:27] [INF] [app.go:511] loadgen is up and running now.<br /> [08-19 16:43:27] [INF] [main.go:403] loading config: /data/es/loadgen.dsl.shawnyan<br /> <br /> 21108 requests finished in 9.79061677s, 1.08MB sent, 3.22MB received<br /> <br /> [Loadgen Client Metrics]<br /> Requests/sec: 2110.63<br /> Request Traffic/sec: 110.22KB<br /> Total Transfer/sec: 440.00KB<br /> Fastest Request: 680.198µs<br /> Slowest Request: 12.409574ms<br /> Status 200: 21108<br /> <br /> [Latency Metrics]<br /> 10000 samples of 21108 events<br /> Cumulative: 8.732205871s<br /> HMean: 851.869µs<br /> Avg.: 873.22µs<br /> p50: 839.498µs<br /> p75: 914.298µs<br /> p95: 1.059197ms<br /> p99: 1.327098ms<br /> p999: 4.83579ms<br /> Long 5%: 1.394411ms<br /> Short 5%: 724.226µs<br /> Max: 11.618475ms<br /> Min: 680.198µs<br /> Range: 10.938277ms<br /> StdDev: 289.216µs<br /> Rate/sec.: 2110.63<br /> <br /> [Latency Distribution]<br /> 680µs - 1.774ms ------------------------------<br /> 1.774ms - 2.867ms -<br /> 2.867ms - 3.961ms -<br /> 3.961ms - 5.055ms -<br /> 5.055ms - 6.149ms -<br /> 6.149ms - 7.243ms -<br /> 7.243ms - 8.336ms -<br /> 8.336ms - 9.43ms -<br /> 9.43ms - 10.524ms -<br /> 10.524ms - 11.618ms -<br /> <br /> <br /> [Estimated Server Metrics]<br /> Requests/sec: 2155.94<br /> Avg Req Time: 927.668µs<br /> Transfer/sec: 449.45KB<br />
更多内容请参阅文档:
[https://infinilabs.cn/docs/lat ... mark/](https://infinilabs.cn/docs/lat ... hmark/)
Rally
如果对 Elasticsearch 熟悉的同学,也可尝试使用 Rally 对 Easysearch 进行测试。
Rally 是 Elasticsearch 的基准测试框架。它可以帮助您完成以下任务:
- 建立索引,根据节点数调节分片数。
- 安装 Elasticsearch 集群以进行基准测试
- 跨 Elasticsearch 版本管理基准数据和规范
- 运行基准测试并记录结果
- 通过连接遥测设备来查找性能问题
- 比较性能结果
安装 Rally。
sh<br /> [root@easysearch /]# pip3 install esrally<br /> Requirement already satisfied: esrally in /usr/local/lib/python3.9/site-packages (2.11.0)<br /> Requirement already satisfied: py-cpuinfo==7.0.0 in /usr/local/lib/python3.9/site-packages (from esrally) (7.0.0)<br /> Requirement already satisfied: elastic-transport==8.4.1 in /usr/local/lib/python3.9/site-packages (from esrally) (8.4.1)<br /> Requirement already satisfied: google-resumable-media[requests]==1.1.0 in /usr/local/lib/python3.9/site-packages (from esrally) (1.1.0)<br /> Requirement already satisfied: urllib3==1.26.18 in /usr/local/lib/python3.9/site-packages (from esrally) (1.26.18)<br /> Requirement already satisfied: google-auth==1.22.1 in /usr/local/lib/python3.9/site-packages (from esrally) (1.22.1)<br /> Requirement already satisfied: thespian==3.10.1 in /usr/local/lib/python3.9/site-packages (from esrally) (3.10.1)<br /> Requirement already satisfied: jsonschema==3.1.1 in /usr/local/lib/python3.9/site-packages (from esrally) (3.1.1)<br /> Requirement already satisfied: markupsafe==2.0.1 in /usr/local/lib64/python3.9/site-packages (from esrally) (2.0.1)<br /> Requirement already satisfied: yappi==1.5.1 in /usr/local/lib64/python3.9/site-packages (from esrally) (1.5.1)<br /> Requirement already satisfied: psutil==5.9.4 in /usr/local/lib64/python3.9/site-packages (from esrally) (5.9.4)<br /> Requirement already satisfied: certifi in /usr/local/lib/python3.9/site-packages (from esrally) (2024.7.4)<br /> Requirement already satisfied: elasticsearch[async]==8.6.1 in /usr/local/lib/python3.9/site-packages (from esrally) (8.6.1)<br /> Requirement already satisfied: ijson==2.6.1 in /usr/local/lib/python3.9/site-packages (from esrally) (2.6.1)<br /> Requirement already satisfied: jinja2==3.1.4 in /usr/local/lib/python3.9/site-packages (from esrally) (3.1.4)<br /> Requirement already satisfied: requests<2.32.0 in /usr/local/lib/python3.9/site-packages (from esrally) (2.31.0)<br /> Requirement already satisfied: tabulate==0.8.9 in /usr/local/lib/python3.9/site-packages (from esrally) (0.8.9)<br /> Requirement already satisfied: zstandard==0.21.0 in /usr/local/lib64/python3.9/site-packages (from esrally) (0.21.0)<br /> Requirement already satisfied: docker==6.0.0 in /usr/local/lib/python3.9/site-packages (from esrally) (6.0.0)<br /> Requirement already satisfied: websocket-client>=0.32.0 in /usr/local/lib/python3.9/site-packages (from docker==6.0.0->esrally) (1.8.0)<br /> Requirement already satisfied: packaging>=14.0 in /usr/lib/python3.9/site-packages (from docker==6.0.0->esrally) (20.9)<br /> Requirement already satisfied: aiohttp<4,>=3 in /usr/local/lib64/python3.9/site-packages (from elasticsearch[async]==8.6.1->esrally) (3.10.4)<br /> Requirement already satisfied: pyasn1-modules>=0.2.1 in /usr/local/lib/python3.9/site-packages (from google-auth==1.22.1->esrally) (0.4.0)<br /> Requirement already satisfied: six>=1.9.0 in /usr/lib/python3.9/site-packages (from google-auth==1.22.1->esrally) (1.15.0)<br /> Requirement already satisfied: rsa<5,>=3.1.4 in /usr/local/lib/python3.9/site-packages (from google-auth==1.22.1->esrally) (4.9)<br /> Requirement already satisfied: setuptools>=40.3.0 in /usr/lib/python3.9/site-packages (from google-auth==1.22.1->esrally) (53.0.0)<br /> Requirement already satisfied: cachetools<5.0,>=2.0.0 in /usr/local/lib/python3.9/site-packages (from google-auth==1.22.1->esrally) (4.2.4)<br /> Requirement already satisfied: google-crc32c<2.0dev,>=1.0 in /usr/local/lib64/python3.9/site-packages (from google-resumable-media[requests]==1.1.0->esrally) (1.5.0)<br /> Requirement already satisfied: attrs>=17.4.0 in /usr/local/lib/python3.9/site-packages (from jsonschema==3.1.1->esrally) (24.2.0)<br /> Requirement already satisfied: importlib-metadata in /usr/local/lib/python3.9/site-packages (from jsonschema==3.1.1->esrally) (8.2.0)<br /> Requirement already satisfied: pyrsistent>=0.14.0 in /usr/local/lib64/python3.9/site-packages (from jsonschema==3.1.1->esrally) (0.20.0)<br /> Requirement already satisfied: yarl<2.0,>=1.0 in /usr/local/lib64/python3.9/site-packages (from aiohttp<4,>=3->elasticsearch[async]==8.6.1->esrally) (1.9.4)<br /> Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib64/python3.9/site-packages (from aiohttp<4,>=3->elasticsearch[async]==8.6.1->esrally) (1.4.1)<br /> Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.9/site-packages (from aiohttp<4,>=3->elasticsearch[async]==8.6.1->esrally) (1.3.1)<br /> Requirement already satisfied: async-timeout<5.0,>=4.0 in /usr/local/lib/python3.9/site-packages (from aiohttp<4,>=3->elasticsearch[async]==8.6.1->esrally) (4.0.3)<br /> Requirement already satisfied: aiohappyeyeballs>=2.3.0 in /usr/local/lib/python3.9/site-packages (from aiohttp<4,>=3->elasticsearch[async]==8.6.1->esrally) (2.3.7)<br /> Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib64/python3.9/site-packages (from aiohttp<4,>=3->elasticsearch[async]==8.6.1->esrally) (6.0.5)<br /> Requirement already satisfied: pyparsing>=2.0.2 in /usr/lib/python3.9/site-packages (from packaging>=14.0->docker==6.0.0->esrally) (2.4.7)<br /> Requirement already satisfied: pyasn1<0.7.0,>=0.4.6 in /usr/local/lib/python3.9/site-packages (from pyasn1-modules>=0.2.1->google-auth==1.22.1->esrally) (0.6.0)<br /> Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.9/site-packages (from requests<2.32.0->esrally) (3.7)<br /> Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib64/python3.9/site-packages (from requests<2.32.0->esrally) (3.3.2)<br /> Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.9/site-packages (from importlib-metadata->jsonschema==3.1.1->esrally) (3.20.0)<br /> WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: <a href="https://pip.pypa.io/warnings/venv" rel="nofollow" target="_blank">https://pip.pypa.io/warnings/venv</a><br /> [root@easysearch /]# esrally --version<br /> esrally 2.11.0<br /> [root@easysearch /]#<br />
关于 Rally 的更多内容,请参阅官方文档:
[https://esrally.readthedocs.io/en/stable/](https://esrally.readthedocs.io/en/stable/)
作者:少安事务所
原文:https://mp.weixin.qq.com/s/9eEH38kgsw4i150CJqyxvQ
【搜索客社区日报】第1886期 (2024-08-23)
社区日报 • Fred2000 发表了文章 • 0 个评论 • 2514 次浏览 • 2024-08-23 11:48
https://opensearch.org/blog/In ... ithm/
2、Elasticsearch 8 RAG 技术分享
https://mp.weixin.qq.com/s/-0vYPmMS2xZUcKkaq5TaQA
3、腾讯云Elasticsearch 优化Lucene性能:高性能缓存的读写锁解决方案
https://mp.weixin.qq.com/s/g-JPECyz3wP6A69Sj-EVVw
4、Easysearch 性能测试方法概要
https://mp.weixin.qq.com/s/9eEH38kgsw4i150CJqyxvQ
编辑:Fred
更多资讯:http://news.searchkit.cn
【搜索客社区日报】第1885期 (2024-08-21)
社区日报 • kin122 发表了文章 • 0 个评论 • 2704 次浏览 • 2024-08-21 16:15
https://cloud.tencent.com/deve ... 46232
2.LangChain 与 Elastic 合作,加入向量数据库和语义重排序功能以增强 RAG原创
https://cloud.tencent.com/deve ... 43581
3.RAG:如何与您的数据对话
https://cloud.tencent.com/deve ... 79569
编辑:kin122
更多资讯:http://news.searchkit.cn
【第3期】2024 搜索客 Meetup | Elasticsearch 的代码结构和写入查询流程的解读 - 下篇
Elasticsearch • searchkit 发表了文章 • 0 个评论 • 3348 次浏览 • 2024-08-21 13:00
本次活动由 搜索客社区、极限科技(INFINI Labs)联合举办,活动主题将深入探讨 Elasticsearch 的两个核心方面:代码结构以及写入和查询的关键流程。本次活动将为 Elasticsearch 初学者和有经验的用户提供宝贵的见解,欢迎大家报名参加、交流学习。
活动主题:Elasticsearch 的代码结构和写入查询流程的解读 - 下篇
活动时间:2024 年 8 月 28 日 19:00-20:00(周三)
活动形式:微信视频号(极限实验室)直播
报名方式:关注或扫码海报中的二维码进行预约
![](https://infinilabs.cn/img/blog ... /1.png)
嘉宾介绍
张磊,极限科技搜索引擎研发负责人,对 Elasticsearch 和 Lucene 源码比较熟悉,目前主要负责公司的 Easysearch 产品的研发以及客户服务工作。
主题摘要
本次分享将探讨 Elasticsearch 的代码结构及其写入和查询流程。内容包括:项目架构、核心模块、插件系统,以及文档索引和查询的各个阶段与分布式查询协调。
活动亮点
- 深入解析 Elasticsearch 代码结构:
- 项目的整体结构:了解 Elasticsearch 项目的组织方式。
- 核心模块及其职责:学习 Elasticsearch 的核心模块及其在系统中的具体角色。
- 插件系统的设计:探索 Elasticsearch 灵活的插件系统设计及其扩展方式。
- 项目的整体结构:了解 Elasticsearch 项目的组织方式。
- 详细解读 Elasticsearch 写入和查询流程:
- 文档索引过程的各个阶段:跟随文档从初始接收至最终存储的索引过程。
- 查询解析和执行的步骤:理解 Elasticsearch 中查询解析和执行的各个步骤。
- 分布式查询的协调过程:学习 Elasticsearch 如何在分布式架构中协调查询,以提供高效且准确的搜索结果。
参与有奖
直播中将设有福袋抽奖环节,参与就有机会获得 INFINI Labs 周边纪念品,包括 T 恤、鸭舌帽、咖啡杯、指甲刀套件等等(图片仅供参考,款式、颜色与尺码随机)。
![](https://infinilabs.cn/img/blog ... ts.png)
活动交流
本活动设有 Meetup 技术交流群,可添加小助手微信入群。
![](https://infinilabs.cn/img/comp ... at.jpg)
本次 Meetup 是深入了解 Elasticsearch 内部工作机制、提升使用技能的绝佳机会。不要错过!
Meetup 讲师招募
![](https://infinilabs.cn/img/blog ... ng.png)
搜索客社区 Meetup 的成功举办,离不开社区小伙伴的热情参与。目前社区讲师招募计划也在持续进行中,我们诚挚邀请各位技术大咖、行业精英踊跃提交演讲议题,与大家分享您的经验。
讲师报名链接:[http://cfp.searchkit.cn](http://cfp.searchkit.cn)
或扫描下方二维码,立刻报名成为讲师!
![](https://infinilabs.cn/img/blog ... de.jpg)
Meetup 活动聚焦 AI 与搜索领域的最新动态,以及数据实时搜索分析、向量检索、技术实践与案例分析、日志分析、安全等领域的深度探讨。
我们热切期待您的精彩分享!
往期回顾
- [【第 2 期】2024 搜索客 Meetup | Elasticsearch 的代码结构和写入查询流程的解读 - 上篇](https://mp.weixin.qq.com/s/oQNej6aDMzLp64_AKxSONw)
- [【第 1 期】2024 搜索客 Meetup | Easysearch 结合大模型实现 RAG](https://mp.weixin.qq.com/s/7fpPFGKltJASspmIaUqJMg)
关于 搜索客(SearchKit)社区
搜索客社区由 Elasticsearch 中文社区进行全新的品牌升级,以新的 Slogan:“搜索人自己的社区” 为宣言。汇集搜索领域最新动态、精选干货文章、精华讨论、文档资料、翻译与版本发布等,为广大搜索领域从业者提供更为丰富便捷的学习和交流平台。
社区官网:[https://searchkit.cn](https://searchkit.cn) 。
- 文档索引过程的各个阶段:跟随文档从初始接收至最终存储的索引过程。
Easysearch x 《黑神话悟空》有奖征文获奖结果公示
Easysearch • INFINI Labs 小助手 发表了文章 • 0 个评论 • 2437 次浏览 • 2024-08-20 13:34
随着《黑神话:悟空》游戏的正式发售,我们 INFINI Labs 组织的 Easysearch 有奖征文大赛也圆满落幕。本次征文活动自启动以来,收到了众多创作者的热情投稿。在此,我们衷心感谢每一位参与活动的作者,是你们的才华和热情让这次征文活动异彩纷呈。
经过专业评审团的认真评选,最终确定了以下获奖作品及作者,现予以公布:
| 奖项 | 作者 | 作品 | 奖品 |
| ------ | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------- |
| 一等奖 | AWS 加油站 | [玩转 Easysearch 语法](https://blog.csdn.net/weixin_3 ... 227001) | 《黑神话:悟空》数字豪华版一套 |
| 二等奖 | 杨帆 | [使用 Easysearch 打造企业内部知识问答系统](https://infinilabs.cn/blog/202 ... earch/) | 《黑神话:悟空》数字标准版一套 |
| 二等奖 | 李家兴 | [从 Elasticsearch 到 Easysearch:国产搜索型数据库的崛起与未来展望](https://infinilabs.cn/blog/202 ... bases/) | 《黑神话:悟空》数字标准版一套 |
| 三等奖 | 严少安 | [Easysearch,地表最强,没有之一!](https://www.modb.pro/db/1823222832453660672) | INFINI Labs 咖啡杯 / 指甲剪套装 |
| 三等奖 | 张磊 | [Easysearch 新特性:写入限流功能介绍](https://infinilabs.cn/blog/202 ... ction/) | INFINI Labs 咖啡杯 / 指甲剪套装 |
| 三等奖 | keep | [如何在 MacOS 环境下快速安装部署 Easysearch](https://blog.csdn.net/weixin_4 ... 238374) | INFINI Labs 咖啡杯 / 指甲剪套装 |
恭喜以上获奖作者,你们的作品不仅展现了 Easysearch 的强大功能,也为社区成员提供了宝贵的学习资源。我们将会通过小助手微信联系各位获奖者,安排奖品的发放。
同时,我们也要感谢所有参与本次征文活动的作者,你们的每一篇 Easysearch 投稿都是对社区的一份贡献。我们期待在未来的活动中再次与大家相遇。
请继续关注 INFINI Labs,我们将持续为大家带来更多优质的产品和精彩的活动。再次感谢大家的参与和支持!
如有疑问或想加入 Easysearch 用户交流群请联系我们小助手!
![小助手微信](https://infinilabs.cn/img/comp ... at.jpg)
附征文活动原文:
[天命人, 你在吗?快拿走你的《黑神话:悟空》游戏,去开启神话冒险!](https://infinilabs.cn/blog/202 ... ukong/)
关于极限科技(INFINI Labs)
![INFINI Labs](https://infinilabs.cn/img/blog ... bs.png)
极限科技,全称极限数据(北京)科技有限公司,是一家专注于实时搜索与数据分析的软件公司。旗下品牌极限实验室(INFINI Labs)致力于打造极致易用的数据探索与分析体验。
极限科技是一支年轻的团队,采用天然分布式的方式来进行远程协作,员工分布在全球各地,希望通过努力成为中国乃至全球企业大数据实时搜索分析产品的首选,为中国技术品牌输出添砖加瓦。
官网:[https://infinilabs.cn](https://infinilabs.cn)
【搜索客社区日报】第1884期 (2024-08-20)
社区日报 • God_lockin 发表了文章 • 0 个评论 • 2277 次浏览 • 2024-08-20 10:29
https://medium.com/%40rahul.fi ... 65ef8
2. 用terraform来管理grafana的告警(需要梯子)
https://medium.com/%40wadexu00 ... 36839
3. 用curator实现es的自动索引管理(需要梯子)
https://medium.com/%40parikshi ... a00c7
编辑:斯蒂文
更多资讯:http://news.searchkit.cn
活动回顾 - 第2期 搜索客 Meetup 线上直播活动圆满结束,附 PPT 下载
活动 • searchkit 发表了文章 • 0 个评论 • 2654 次浏览 • 2024-08-17 17:44
2024 年 8 月 14 日,由搜索客社区和极限科技(INFINI Labs)联合举办的第 2 期线上 Meetup 技术交流直播活动圆满结束。本期 Meetup 直播活动吸引了超过 500+ 人次的技术爱好者参与,共同学习和交流了 Elasticsearch 源码结构、写入流程、插件开发、性能优化等。
主题:Elasticsearch 的代码结构和写入查询流程的解读
本期 Meetup 活动由极限科技搜索引擎研发负责人 张磊老师 为大家带来了主题为《Elasticsearch 的代码结构和写入查询流程的解读》精彩分享。
张磊老师首先对 ES 项目架构、核心模块、插件系统进行分析和解读,然后深入讲解了 ES 的写入流程,同时结合 ES 源代码进行 Demo 演示。以下为摘取 PPT 部分内容截图:
直播间的小伙伴对分享内容非常感兴趣,纷纷在评论区留言提问,下面摘取部分提问:
- 如何学习 ES 源码?
- 开发 ES 插件有什么需要注意的地方吗
- bulk 请求有没有请求大小或者文档数的优化参数?
- bulk 写入数据时,单次写入的条数一般限制到多少?
- 在大数据请求时,一直内存熔断,内存已经给到了 32GB,怎么排查是哪里的问题?
- es8.x 的 knn 和 os 的 knn 有些什么区别?
张磊老师从专业的角度热情耐心的一一进行了解答,获得了大家的点赞好评。
同时,在整个直播过程中,主持人进行了多轮激动人心的抽奖活动,为参会小伙伴带来了额外的惊喜,将活动气氛推向了高潮。
本期 Meetup 旨在为 ES 初学者和有经验的用户提供深入见解,随着活动的圆满结束,参会小伙伴们不仅收获和提升在 ES 使用和开发方面的能力,还共同推动了技术的进步和社区的发展。
最后感谢大家的参与和支持,让我们共同期待下一次 搜索客 Meetup 活动带来更多的精彩内容!
本期 Meetup 的 PPT 下载
本期 PPT 下载的链接:https://searchkit.cn/slides/326
本期 Meetup 视频回放
扫码关注极限实验室视频号查看直播回放,或者扫码关注极限实验室 B 站 账号,可查看本期 Meetup 活动视频。我们也会在视频号、B 站持续更新最新技术视频,欢迎通过点赞、投币,收藏,三连来支持我们。
![](https://elasticsearch.cn/uploa ... 44.png)
Meetup 活动讲师招募
![讲师招募](https://infinilabs.cn/img/blog ... ng.png)
搜索客社区 Meetup 的成功举办,离不开社区小伙伴的热情参与。目前社区讲师招募计划也在持续进行中,我们诚挚邀请各位技术大咖、行业精英踊跃提交演讲议题,与大家分享您的经验。
讲师报名链接:[http://cfp.searchkit.cn](http://cfp.searchkit.cn)
或扫描下方二维码,立刻报名成为讲师!
![](https://elasticsearch.cn/uploa ... fe.png)
Meetup 活动聚焦 AI 与搜索领域的最新动态,以及数据实时搜索分析、向量检索、技术实践与案例分析、日志分析、安全等领域的深度探讨。
我们热切期待您的精彩分享!
关于 搜索客(SearchKit)社区
搜索客社区由 Elasticsearch 中文社区进行全新的品牌升级,以新的 Slogan:“搜索人自己的社区” 为宣言。汇集搜索领域最新动态、精选干货文章、精华讨论、文档资料、翻译与版本发布等,为广大搜索领域从业者提供更为丰富便捷的学习和交流平台。社区官网:[https://searchkit.cn](https://searchkit.cn) 。
关于极限科技(INFINI Labs)
![INFINI Labs](https://infinilabs.cn/img/blog ... bs.png)
极限科技,全称极限数据(北京)科技有限公司,是一家专注于实时搜索与数据分析的软件公司。旗下品牌极限实验室(INFINI Labs)致力于打造极致易用的数据探索与分析体验。
极限科技是一支年轻的团队,采用天然分布式的方式来进行远程协作,员工分布在全球各地,希望通过努力成为中国乃至全球企业大数据实时搜索分析产品的首选,为中国技术品牌输出添砖加瓦。
官网:[https://infinilabs.cn](https://infinilabs.cn)
如何在 MacOS 环境下快速安装部署 Easysearch
Easysearch • INFINI Labs 小助手 发表了文章 • 0 个评论 • 2621 次浏览 • 2024-08-17 14:56
1、什么是 Easysearch
![](https://infinilabs.cn/img/blog ... p2.png)
Easysearch 是极限科技研发的一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。 同时也是一款具备自主可控的分布式近实时搜索型数据库产品,具备高性能、高可用、弹性伸缩、高安全性等特性,具备支持丰富的个性化搜索及聚合分析能力,可部署在物理机、虚拟机、容器、私有云和公有云,能承载 PB 级别的海量业务数据,为金融核心系统、运营商、制造业和政企业务系统提供安全、稳定、可靠的快速检索和实时数据探索分析能力,可满足不同业务场景的各项复杂需求。
2、前期准备
在安装 Easysearch 之前,确保您的 MacOS 系统符合以下要求:
- MacOS 操作系统版本应为最新或推荐稳定版本。
- 确保系统上已安装 Java 运行环境,因为 Easysearch 是基于 Java 开发的。
3、下载 Easysearch
打开浏览器,访问 [Easysearch 官方下载页面](https://infinilabs.cn/download/?product=easysearch)。
找到 MacOS 版本安装包,然后根据自己电脑 CPU 架构选择对应的 Easysearch 安装包。我自己的电脑是 Intel X86 架构,直接选择默认的 amd64,点击下载即可。如果你的电脑是 Apple 的自己的 M 系列芯片,请选择 arm64 版本安装包。
4、安装 Easysearch
打开终端(Terminal)并导航到下载目录,找到 Easysearch 的压缩包,然后双击解压到您选择的目录。或者使用以下命令解压文件:
bash<br /> unzip ./easysearch-1.8.3-265-mac-amd64.zip<br />
5、启动 Easysearch
- 执行初始化脚本:
由于 Easysearch 默认自带了安全模块,所以在启动之前需要先执行初始化脚本,脚本里会自动帮我们处理好 Easysearch 安全证书、下载基本的 plugins 插件以及初始用户名和密码等,方便省心。
bash<br /> cd ./easysearch-1.8.3-265-mac-amd64 && bin/initialize.sh<br />
执行过程中遇到 [y/N] 询问,输入 y 即可。最后执行完初始化脚本之后,我们可以在输出的 log 日志中看到 easysearch 的访问用户名和密码,需要注意的是,这个用户名和密码需要自己保存好。 如下图所示:
- 启动 Easysearch:
使用以下命令启动 Easysearch:
bash<br /> ./bin/easysearch<br />
启动后,Easysearch 将在终端中输出运行日志,您可以在此查看启动过程中的详细信息。
6、验证安装
- 检查运行状态:
打开浏览器,访问<a href="https://localhost:9200" rel="nofollow" target="_blank">https://localhost:9200</a>
,输入上面提到的用户名密码,如果您看到类似以下的 JSON 响应,说明 Easysearch 已成功启动:
- 检查集群健康状况:
在浏览器中输入https:/localhost:9200/_cluster/health?pretty
或者在终端中执行以下命令来检查集群的健康状况:
bash<br /> curl -ku admin:4395c2f67208ca5ad7de <a href="https://localhost:9200/_cluster/health?pretty"" rel="nofollow" target="_blank">https://localhost:9200/_cluste ... ot%3B</a><br />
这将返回集群的详细健康信息,status
为 green 表示集群状态正常。如下图所示:
7、总结
通过上述步骤,可以轻松地在 MacOS 环境下安装和部署 Easysearch,享受它带来的强大功能和便捷体验。Easysearch 作为 Elasticsearch 的替代产品,不仅在功能上保持了高效和稳定,还进一步优化了搜索业务场景,使其更适合企业级应用。现在,您可以进一步配置集群,开始索引数据,并探索 Easysearch 提供的强大搜索和分析功能。建议参考 [官网文档](https://infinilabs.cn/docs/lat ... rview/),深入了解并实践更多高级功能。
关于 Easysearch 有奖征文活动
![黑神话悟空](https://infinilabs.cn/img/blog ... er.png)
无论你是 Easysearch 的老用户,还是第一次听说这个名字,只要你对 INFINI Labs 旗下的 Easysearch 产品感兴趣,或者是希望了解 Easysearch,都可以参加这次活动。
详情查看:[Easysearch 征文活动](https://infinilabs.cn/blog/202 ... ukong/)
作者:Keep simple
原文:https://blog.csdn.net/weixin_4 ... 38374
- 执行初始化脚本:
【搜索客社区日报】第1883期 (2024-08-16)
社区日报 • Fred2000 发表了文章 • 0 个评论 • 2625 次浏览 • 2024-08-16 15:24
https://mp.weixin.qq.com/s/hyG-xrZrdft77hA2adMY2g
2、B站搜索建库架构优化实践
https://mp.weixin.qq.com/s/Kd9hqXkTsP5Zu8dnFQfDwA
3、使用极限网关实现 ES 跨集群搜索
https://infinilabs.cn/blog/202 ... arch/
4、使用 AWS EKS 部署 Easysearch
https://blog.csdn.net/weixin_3 ... 18050
编辑:Fred
更多资讯:http://news.searchkit.cn
使用 AWS EKS 部署 Easysearch
Easysearch • INFINI Labs 小助手 发表了文章 • 0 个评论 • 2672 次浏览 • 2024-08-15 15:47
随着企业对数据搜索和分析需求的增加,高效的搜索引擎解决方案变得越来越重要。[Easysearch](https://infinilabs.cn/blog/202 ... yntax/) 作为一款强大的企业级搜索引擎,可以帮助企业快速构建高性能、可扩展的数据检索系统。在云计算的背景下,使用容器化技术来部署和管理这些解决方案已经成为主流选择,而 Amazon Elastic Kubernetes Service (EKS) 则提供了一个强大且易于使用的平台来运行容器化的应用程序。
本文旨在探索如何在 AWS EKS 上部署 Easysearch,并通过实践操作展示从集群配置到服务部署的完整过程。通过本文,读者可以了解如何在云环境中快速搭建高效的搜索服务,最大化利用云资源的弹性和可扩展性。
准备工作
- 准备一个 AWS Global 账户,本文选择东京区域(ap-northeast-1)进行部署。
- 部署 EKS 集群版本为 1.30,同时需要在 Linux 环境中安装 AWS CLI、Helm、eksctl 和 kubectl 等命令行工具。本文使用 eksctl 管理 EKS 集群,eksctl 是 AWS 官方推出的高效管理 EKS 集群的命令行工具。
- 本文将使用 EBS-CSI-Driver 作为存储驱动来部署 Easysearch 服务,并通过 AWS LoadBalancer Controller 将 Easysearch Console 服务以 AWS 负载均衡器的方式对外提供服务,连接集群内部的 Easysearch。
命令行工具的安装
安装 AWS CLI:
shell<br /> curl "<a href="https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip"" rel="nofollow" target="_blank">https://awscli.amazonaws.com/a ... ot%3B</a> -o "awscliv2.zip"<br /> unzip awscliv2.zip<br /> ./aws/install -i /usr/local/aws-cli -b /usr/local/bin<br /> aws --version<br />
安装 Helm:
shell<br /> curl <a href="https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3" rel="nofollow" target="_blank">https://raw.githubusercontent. ... elm-3</a> > get_helm.sh<br /> chmod 700 get_helm.sh<br /> ./get_helm.sh<br />
安装 eksctl:
```shell对于 ARM 系统,设置 ARCH 为:
arm64
、armv6
或armv7
ARCH=amd64
PLATFORM=$(uname -s)$ARCH
curl -sLO "<a href="https://github.com/eksctl-io/eksctl/releases/latest/download/eksctl" rel="nofollow" target="blank">https://github.com/eksctl-io/e ... sctl$PLATFORM.tar.gz"
(可选)验证校验和
curl -sL "<a href="https://github.com/eksctl-io/eksctl/releases/latest/download/eksctl_checksums.txt"" rel="nofollow" target="blank">https://github.com/eksctl-io/e ... ot%3B | grep $PLATFORM | sha256sum --check
tar -xzf eksctl$PLATFORM.tar.gz -C /tmp && rm eksctl_$PLATFORM.tar.gz
sudo mv /tmp/eksctl /usr/local/bin
<br /> <br /> 安装 kubectl:<br /> <br />
shell
curl -O https://s3.us-west-2.amazonaws ... bectl
chmod +x ./kubectl
mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$HOME/bin:$PATH
```
配置 EKS 集群环境
我们使用 eksctl 创建一个 1.30 版本的集群,这里通过 YAML 模板定义 EKS 集群的 VPC 网络配置,并根据 eksctl 官方文档调整相关字段。将以下模板保存为my-cluster.yaml
文件:
```yaml创建一个包含 2 个 m5.2xlarge 实例的节点组
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: LAB-1-30
region: ap-northeast-1
vpc:
subnets:
private:
ap-northeast-1a: { id: subnet-11223344 }
ap-northeast-1c: { id: subnet-55667788 }
ap-northeast-1d: { id: subnet-99001122 }
nodeGroups:- name: managed-workers-01
labels: { role: workers }
instanceType: m5.2xlarge
minSize: 2
maxSize: 4
desiredCapacity: 3
privateNetworking: true
volumeSize: 30
<br /> <br /> 通过以下命令创建集群:<br /> <br />
shell
eksctl create cluster -f my-cluster.yaml
<br /> <br /> 集群创建完成后,使用以下命令检查集群是否就绪:<br /> <br />
shell
更新 kubeconfig 的凭证文件
aws eks update-kubeconfig --name LAB-1-30 --region ap-northeast-1
kubectl get node
[ec2-user@ip-10-0-0-84 ~]$ kubectl get node
NAME STATUS ROLES AGE VERSION
ip-10-0-100-132.ap-northeast-1.compute.internal Ready16m v1.30.2-eks-1552ad0
ip-10-0-101-148.ap-northeast-1.compute.internal Ready16m v1.30.2-eks-1552ad0
<br /> <br /> 安装 EBS-CSI-Driver 插件,后续部署时可以指定 StorageClass 来使用亚马逊云的 EBS 块存储服务:<br /> <br />
shell
eksctl utils associate-iam-oidc-provider --region=ap-northeast-1 --cluster=LAB-1-30 --approve
eksctl create iamserviceaccount \
--name ebs-csi-controller-sa \
--namespace kube-system \
--cluster LAB-1-30 \
--region ap-northeast-1 \
--role-name AmazonEKS_EBS_CSI_DriverRole \
--role-only \
--attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \
--approve
eksctl create addon --cluster LAB-1-30 --name aws-ebs-csi-driver --version latest --region ap-northeast-1 \
--service-account-role-arn arn:aws:iam::112233445566:role/AmazonEKS_EBS_CSI_DriverRole --force
[ec2-user@ip-10-0-0-84 ~]$ kubectl get pod -n kube-system | grep -i ebs
ebs-csi-controller-868598b64f-pwmxq 6/6 Running 0 11m
ebs-csi-controller-868598b64f-qn2lz 6/6 Running 0 11m
ebs-csi-node-fplxg 3/3 Running 0 11m
ebs-csi-node-v6qwj 3/3 Running 0 11m
<br /> <br /> 安装 AWS LoadBalancer Controller 组件:<br /> <br />
shell
eksctl create iamserviceaccount \
--cluster=LAB-1-30 \
--region ap-northeast-1 \
--namespace=kube-system \
--name=aws-load-balancer-controller \
--role-name AmazonEKSLoadBalancerControllerRole_130 \
--attach-policy-arn=arn:aws:iam::112233445566:policy/AWSLoadBalancerControllerIAMPolicy \
--approve
helm repo add eks https://aws.github.io/eks-charts
helm repo update eks
wget https://raw.githubusercontent. ... .yaml
kubectl apply -f crds.yaml
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
-n kube-system \
--set clusterName=LAB-1-30 \
--set serviceAccount.create=false \
--set serviceAccount.name=aws-load-balancer-controller \
--set region=ap-northeast-1
验证安装
kubectl get deployment -n kube-system aws-load-balancer-controller
NAME READY UP-TO-DATE AVAILABLE AGE
aws-load-balancer-controller 2/2 2 2 39s
```
至此,我们已经完成了 EKS 集群的配置。
安装 Easysearch 服务
本文中,将通过 AWS LoadBalancer 部署 Console 服务。首先,通过 Helm 将 Console 相关的模板文件拉取到本地,执行以下命令:
shell<br /> helm pull infinilabs/console<br /> tar -zxvf console-0.2.0.tgz<br /> cd console<br />
目录结构如下:
shell<br /> [ec2-user@ip-10-0-0-84 console]$ tree<br /> .<br /> ├── Chart.yaml<br /> ├── templates<br /> │ ├── NOTES.txt<br /> │ ├── _helpers.tpl<br /> │ ├── hpa.yaml<br /> │ ├── ingress.yaml<br /> │ ├── service.yaml<br /> │ ├── serviceaccount.yaml<br /> │ └── statefulset.yaml<br /> └── values.yaml<br />
我们需要修改service.yaml
和values.yaml
中的部分配置:
```yamlserivce.yaml
参考 AWS Load Balancer Controller 的文档,配置负载均衡器面向公网
metadata:
annotations:
service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: instance
service.beta.kubernetes.io/aws-load-balancer-subnets: subnet-11223344, subnet-55667788, subnet-9911223344
values.yaml
使用 GP2 StorageClass,并指定 Service Type 为 LoadBalancer
service:
type: LoadBalancer
storageClassName: gp2
<br /> <br /> 使用 Helm 部署 console 服务:<br /> <br />
shell
kubectl create ns Easysearch
helm upgrade --install console . -f values.yaml -n Easysearch
检查是否创建了 Service 并获取负载均衡器的 DNS 地址
kubectl get svc -n Easysearch
NAME TYPE CL
USTER-IP EXTERNAL-IP PORT(S) AGE
console LoadBalancer 172.20.237.237 k8s-xxxx.elb.ap-northeast-1.amazonaws.com 9000:32190/TCP 6h49m
<br /> <br /> 接下来是创建 Easysearch 单节点集群服务。创建一个新的 `values.yaml` 文件并定义使用 GP2 类型的 StorageClass,如下:<br /> <br />
shell
cd ~
echo 'storageClassName: gp2' > values.yaml
cat << EOF | kubectl apply -n Easysearch -f -
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: Easysearch-ca-issuer
spec:
selfSigned: {}
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: Easysearch-ca-certificate
spec:
commonName: Easysearch-ca-certificate
duration: 87600h0m0s
isCA: true
issuerRef:
kind: Issuer
name: Easysearch-ca-issuer
privateKey:
algorithm: ECDSA
size: 256
renewBefore: 2160h0m0s
secretName: Easysearch-ca-secret
EOF
helm install Easysearch infinilabs/Easysearch -n Easysearch -f values.yaml
<br /> <br /> 至此,我们已在 AWS EKS 平台上完成了 Easysearch 的部署。可以通过 Kubernetes 中的 Service DNS 地址在 Console 中验证连接到内部的 Easysearch 服务。本文中使用的地址为:`Easysearch.Easysearch.svc.cluster.local:9200`。<br /> <br /> 也可以在 Easysearch 的 Pod 中使用命令进行连接验证:<br /> <br />
shell
kubectl exec -n Easysearch Easysearch-0 -it -- curl -ku 'admin:admin' https://Easysearch.Easysearch. ... :9200
{
"name" : "Easysearch-0",
"cluster_name" : "infinilabs",
"cluster_uuid" : "fq3r_ZaHSFuZDjDtKyJY_w",
"version" : {
"distribution" : "Easysearch",
"number" : "1.6.0",
"distributor" : "INFINI Labs",
"build_hash" : "e5d1ff9067b3dd696d52c61fbca1f8daed931fb7",
"build_date" : "2023-09-22T00:55:32.292580Z",
"build_snapshot" : false,
"lucene_version" : "8.11.2",
"minimum_wire_lucene_version" : "7.7.0",
"minimum_lucene_index_compatibility_version" : "7.7.0"
},
"tagline" : "You Know, For Easy Search!"
}
```
总结
通过本文的实践操作,我们成功地在 AWS EKS 平台上部署了 Easysearch 服务,验证了其在云环境中的高效运行能力。从 EKS 集群的配置、存储和网络资源的准备,到最终的 Easysearch 部署与测试,整个过程展示了如何利用 AWS 提供的工具和服务,快速构建企业级搜索引擎解决方案。
通过这次部署,我们不仅了解了 Easysearch 在 Kubernetes 环境中的部署方法,还深入体验了 AWS EKS 平台的强大功能。未来,随着企业数据量的不断增长,结合云计算的弹性和容器化技术的优势,将会为企业的数据管理和搜索提供更加高效的解决方案。
参考文档
- name: managed-workers-01
- [AWS 命令行界面](https://aws.amazon.com/cn/cli/)
- [Helm](https://helm.sh/)
- [eksctl](https://eksctl.io/)
- [Helm Chart 部署 Easysearch](https://infinilabs.cn/docs/lat ... /helm/)
关于 Easysearch 有奖征文活动
![黑神话悟空](https://infinilabs.cn/img/blog ... er.png)
无论你是 Easysearch 的老用户,还是第一次听说这个名字,只要你对 INFINI Labs 旗下的 Easysearch 产品感兴趣,或者是希望了解 Easysearch,都可以参加这次活动。
详情查看:[Easysearch 征文活动](https://infinilabs.cn/blog/202 ... ukong/)
作者:韩旭,亚马逊云技术支持,亚马逊云科技技领云博主,目前专注于云计算开发和大数据领域。
原文:https://infinilabs.cn/blog/202 ... -eks/
【搜索客社区日报】第1882期 (2024-08-15)
社区日报 • Se7en 发表了文章 • 0 个评论 • 2736 次浏览 • 2024-08-15 12:27
https://towardsdatascience.com ... 00efd
2.OpenSearch 中语义搜索的 ABC:架构、基准和组合策略
https://opensearch.org/blog/se ... ormer
3.LangFlow: GenAI 领域的 Node-RED(拖拽式低代码应用开发框架)
https://www.bilibili.com/video/BV1YQenetEYe
4.基于 SiliconCloud 使能 GraphRAG
https://www.bilibili.com/video/BV1Chv4eFE5s/?p=15
编辑:Se7en
更多资讯:http://news.searchkit.cn
【搜索客社区日报】第1881期 (2024-08-14)
社区日报 • kin122 发表了文章 • 0 个评论 • 2836 次浏览 • 2024-08-14 14:06
https://zhuanlan.zhihu.com/p/706262790
2.95% 向量资源节省,火山引擎云搜索 RAG 技术体系演进
https://mp.weixin.qq.com/s/jNNWFhrRjxDRhNbe5kpmag
3.基于火山引擎云搜索服务和豆包模型搭建 RAG 推理任务
https://mp.weixin.qq.com/s/Wwst5Jjm3oYJTve1QnmuNg
编辑:kin122
更多资讯:http://news.searchkit.cn
从 Elasticsearch 到 Easysearch:国产搜索型数据库的崛起与未来展望
Easysearch • INFINI Labs 小助手 发表了文章 • 0 个评论 • 3173 次浏览 • 2024-08-14 12:17
![](https://infinilabs.cn/img/blog ... bg.png)
1. 引言:数据库的定义与作用
1.1 数据库的定义
数据库是一个专门用于组织、存储和管理数据的系统(Database System,简称 DBS),它以高效的方式为用户提供数据的存储、访问和管理功能。数据库的定义涵盖了各种数据模型和结构,主要可以分为关系型数据库(RDBMS)和非关系型数据库(NoSQL)两大类。
![](https://infinilabs.cn/img/blog ... p1.png)
- 关系型数据库:以二维表格的形式组织数据,通过主键、外键来维持表与表之间的关系。这种数据库模型擅长处理结构化数据,并且通过 SQL(Structured Query Language)来管理数据。其最大的优势在于数据的一致性和完整性,但在处理大量非结构化数据时可能表现不佳。
- 非关系型数据库:也称为 NoSQL 数据库,适合存储和处理非结构化或半结构化数据,如文档、键值对、图形和列族等。NoSQL 数据库通常具有更高的灵活性和扩展性,尤其适合处理大规模分布式数据集和实时数据处理任务。
1.2 数据库在现代计算中的作用
在现代计算环境中,数据库是信息系统的核心。无论是互联网企业,还是传统行业的数字化转型,都依赖于强大的数据库系统来支撑各种应用程序的运行。数据库的作用包括:
- 数据存储:数据库能够安全地存储大规模数据,无论是结构化数据如表格,还是非结构化数据如图像和文本。
- 数据管理:数据库提供了复杂的查询、排序、更新、删除等操作,确保数据可以被有效地管理和利用。
- 数据分析:借助数据库中的索引和搜索功能,用户可以对海量数据进行快速检索和分析,从而支持实时决策和业务优化。
- 数据安全:数据库系统通常包含访问控制、加密、备份和恢复等功能,保护数据的机密性、完整性和可用性。
数据库已经成为现代企业运作的基石,为电子商务、社交媒体、金融服务、健康医疗等领域提供了不可或缺的数据支持。
2. 数据库的演变
2.1 关系型数据库的崛起
数据库的发展主要历经三个阶段,前关系型、关系型和后关系型。
![](https://infinilabs.cn/img/blog ... p5.png)
20 世纪 70 年代,埃德加·科德提出了关系型数据库模型的概念,这一创新彻底改变了数据管理的方式。关系型数据库以关系代数为理论基础,将数据组织为多个相互关联的二维表格,这种模型极大简化了数据存储与检索的复杂性。
- 表格结构:数据以表的形式存储,每个表由行和列组成,行代表记录,列代表字段。表与表之间通过主键和外键来建立关系。
- SQL 的引入:为了管理关系型数据库,科德引入了结构化查询语言(SQL),这是一种强大的数据操作语言,允许用户通过简单的语句执行复杂的查询操作。
- 数据的一致性和完整性:关系型数据库通过事务处理机制(ACID 特性:原子性、一致性、隔离性和持久性),确保数据在并发操作和系统故障情况下保持一致性和完整性。
由于其高效的数据管理能力和强大的查询功能,关系型数据库迅速成为企业级应用的主流选择,在银行、保险、制造业等领域得到了广泛应用。
2.2 关系型数据库的局限性
随着信息技术的飞速发展,数据量呈现爆炸式增长,数据类型也日益多样化,这使得关系型数据库逐渐暴露出其局限性。
- 扩展性不足:关系型数据库通常依赖垂直扩展(增加单个服务器的硬件能力)来提升性能,但这种方式在面对海量数据时成本高昂且效率有限。而对于需要分布式处理的大规模数据集,关系型数据库的横向扩展能力(增加服务器节点)较弱,难以满足分布式系统的需求。
- 非结构化数据处理困难:关系型数据库擅长处理结构化数据,但对于文本、图像、视频等非结构化数据的处理效率较低,需要额外的处理步骤和存储空间。这种局限性使其在面对现代大数据环境时显得捉襟见肘。
- 灵活性不足:关系型数据库的表结构和模式是预定义的,这意味着在数据模型发生变化时,修改数据库结构的成本和风险都较高,影响了系统的灵活性和适应性。
这些局限性推动了新型数据库技术的发展,尤其是 NoSQL 数据库的兴起,它们能够更好地处理分布式环境下的大规模非结构化数据。
3. 搜索型数据库的兴起
3.1 非结构化数据处理的需求
随着互联网和信息技术的发展,数据的类型和规模发生了巨大变化。除了传统的结构化数据,非结构化数据(如文本、图像、音频、视频等)也在迅速增长。这类数据并不适合存储在传统的关系型数据库中,因为它们无法以固定的表格形式进行有效的组织和管理。
在这种背景下,企业和组织对非结构化数据的处理和分析需求日益强烈。例如,社交媒体平台需要实时分析大量用户生成的文本内容,电子商务网站需要对用户的搜索和购买历史进行个性化推荐。这些需求促使数据库技术朝着更灵活和高效的方向发展。
为了应对这一挑战,NoSQL 数据库应运而生。NoSQL 数据库不依赖于固定的表格结构,而是支持多种数据模型,如文档、键值对、列族和图数据库等。它们在处理大规模分布式数据和非结构化数据时表现优异,尤其是在扩展性和灵活性方面。
然而,随着搜索需求的日益复杂,简单的 NoSQL 数据库已无法满足企业对快速全文检索、实时分析以及复杂查询的需求。这时,搜索型数据库逐渐成为焦点。它们不仅能够处理大规模数据,还能在数秒内从庞大的数据集中检索出相关信息,大大提升了数据的利用价值。
3.2 搜索型数据库的定义与特点
搜索型数据库是一类专门设计用于处理和检索大量非结构化数据的数据库系统。与传统的关系型数据库不同,搜索型数据库的主要功能是快速、准确地进行全文检索和复杂查询,尤其是在处理文本数据时表现出色。
核心技术与特点:
- 倒排索引:这是搜索型数据库的核心技术,它通过为每个单词建立索引来加速查询过程。当用户输入查询时,系统可以直接通过索引定位相关文档,而无需逐个扫描整个数据库。
- 分布式架构:搜索型数据库通常采用分布式架构,以便能够处理大规模的数据集。它们将数据分布在多个节点上,确保即使在高并发或大数据量的情况下,系统仍然能够高效运行。
- 实时数据处理:现代搜索型数据库不仅支持批量数据处理,还能处理实时数据,这使得它们非常适合用于日志管理、监控和数据流分析等场景。
- 可扩展性:由于采用了分布式设计,搜索型数据库可以通过增加节点轻松扩展,从而处理日益增长的数据量和查询需求。
通过这些特点,搜索型数据库已经成为处理海量非结构化数据的关键工具,为企业和组织提供了强大的数据检索和分析能力。
4. Elasticsearch:革命性的搜索型数据库
4.1 Elasticsearch 的背景与发展
![](https://infinilabs.cn/img/blog ... 06.png)
Elasticsearch 是由 Shay Banon 于 2010 年基于开源搜索引擎库 Apache Lucene 开发的。它的出现,标志着搜索型数据库进入了一个新的时代。Elasticsearch 旨在为现代数据驱动的应用程序提供高效、灵活的搜索和分析功能。由于其强大的功能和易用性,Elasticsearch 迅速在全球范围内获得了广泛的采用。
Elasticsearch 的诞生源于对大规模数据处理和全文检索的需求。随着互联网的快速发展,企业需要一种能够高效处理和搜索海量数据的工具,而传统的关系型数据库和早期的 NoSQL 解决方案无法满足这一需求。Elasticsearch 在此背景下应运而生,成为解决这些挑战的理想选择。
4.2 核心特性与架构
Elasticsearch 之所以能够在众多搜索型数据库中脱颖而出,主要得益于其强大的核心特性和先进的架构设计。
核心特性:
- 分布式架构:Elasticsearch 的分布式设计使其能够在多个节点上分片存储数据,从而实现高可用性和可扩展性。每个分片都是一个独立的搜索引擎,可以在多个节点之间进行复制,以确保数据的冗余和安全。
- RESTful API:Elasticsearch 提供了一个易于使用的 RESTful API,开发者可以通过简单的 HTTP 请求与其进行交互。这种设计使得 Elasticsearch 可以轻松集成到各种应用程序中。
- 实时索引和搜索:Elasticsearch 支持实时数据索引,这意味着数据在写入后几乎可以立即被搜索到。这一特性使其非常适合用于日志管理、监控和实时分析等需要快速响应的场景。
- 灵活的查询语言:Elasticsearch 提供了功能强大的查询 DSL(Domain Specific Language),允许用户进行复杂的查询操作,如布尔查询、范围查询、模糊查询等。它还支持聚合查询,使用户能够对数据进行高级分析。
架构设计:
Elasticsearch 的架构基于分片(Shard)和副本(Replica)的概念。每个索引被划分为若干个分片,每个分片可以有一个或多个副本。这种设计不仅提高了数据的可用性和容错性,还使得系统能够轻松处理大规模数据集。
此外,Elasticsearch 还使用了 Apache Lucene 作为底层搜索库,充分利用了 Lucene 强大的全文检索能力和索引机制。这使得 Elasticsearch 在处理复杂搜索任务时表现得非常高效。
4.3 典型应用场景
Elasticsearch 在多个行业和场景中得到了广泛应用,其灵活性和强大的搜索能力使其成为许多企业的首选解决方案。
- 日志和基础设施监控:在 IT 运维中,Elasticsearch 常用于收集和分析系统日志、应用日志和安全日志。通过与 Kibana(一个开源的分析和可视化平台)结合,用户可以实时监控系统状态,并快速识别和解决问题。
- 企业搜索:Elasticsearch 被广泛应用于企业内部文档和数据的搜索管理。无论是知识管理系统还是文档管理平台,Elasticsearch 都能够提供高效的全文检索和信息聚合能力,帮助企业提升工作效率。
- 电子商务搜索:在电子商务领域,Elasticsearch 用于实现快速、精确的产品搜索和推荐系统。它不仅可以处理大量产品数据,还能根据用户行为提供个性化推荐,提升用户体验和转化率。
5. Elasticsearch 的挑战与发展
5.1 扩展性问题
尽管 Elasticsearch 在处理大规模数据方面表现优异,但在面对极端大规模的应用场景时,其扩展性仍然是一个挑战。由于分布式系统的复杂性,网络分区、节点故障等问题可能导致数据不一致,甚至影响系统的整体性能。
为了应对这些挑战,开发者们引入了多种扩展性优化措施,例如改进分片管理策略、优化分布式查询算法等。这些改进旨在提高 Elasticsearch 在大规模集群中的稳定性和效率,但随着数据量的持续增长,扩展性问题仍然是一个需要持续关注和解决的问题。
5.2 性能优化
随着使用 Elasticsearch 的企业和应用越来越多,性能优化成为了一个关键议题。为了保证 Elasticsearch 在大规模数据处理中的高效性,开发者们采取了多种优化手段,包括改进索引策略、调整缓存机制、优化查询执行路径等。
此外,为了满足不同场景下的性能需求,Elasticsearch 还引入了多种配置选项,允许用户根据具体应用场景进行调整。例如,通过调整分片数量和副本数,用户可以在性能和数据冗余之间找到平衡。
5.3 安全与合规
随着全球数据隐私和安全法律法规的日益严格,Elasticsearch 在安全和合规性方面的挑战也日益凸显。企业在使用 Elasticsearch 时,必须确保数据的安全性和合规性,尤其是在处理敏感数据时。
为了解决这些问题,Elasticsearch 提供了一系列安全功能,如访问控制、数据加密、审计日志等。此外,开发者们还可以通过配置和插件,实现更高级别的安全措施,以满足特定行业和地区的合规要求。
但是,Elasticsearch 的安全性和合规性仍然是一个需要不断优化的领域。近几年 ES 数据泄露事件频发,很多 ES 库连基本的安全认证都没有,导致很多企业直接把 ES 当做存储库,数据泄露后直接被黑客利用。
结合今年 OpenAi 停止对中国内地和香港地区提供 API 服务可以看出,依赖国外技术可能带来技术封锁风险,一旦国外企业因政治或经济原因停止服务,中国企业的业务连续性和数据安全性将受到威胁。
6. 国内搜索型数据库的发展
6.1 中国搜索数据库的发展背景
随着国家对科技自主创新的重视,中国的数据库技术在过去十年中取得了显著进展。尤其是在中美技术竞争加剧的背景下,减少对国外技术的依赖成为了中国科技发展的战略目标。这种背景促使了国产数据库的加速发展,特别是在搜索型数据库领域。众多中国企业开始自主研发具备核心技术的数据库产品,试图在这一领域实现突破。
政策推动与市场需求
中国政府出台了一系列政策,鼓励本土企业在关键技术领域实现自主可控。这些政策不仅为企业提供了资金支持和政策优惠,还明确了在一些关键行业中优先使用国产软件的导向。同时,随着中国企业在互联网、电子商务、智能制造等领域的快速发展,对高效搜索和数据处理的需求愈发迫切,这也成为国产搜索型数据库发展的强大推动力。
6.2 Easysearch 的兴起
![](https://infinilabs.cn/img/blog ... er.png)
在此背景下,Easysearch 作为中国本土开发的搜索型数据库脱颖而出。Easysearch 的设计目标是为中国企业提供一个高效、可靠且适应本土需求的搜索与数据分析解决方案。与国外的 Elasticsearch 相似,Easysearch 基于分布式架构和倒排索引技术,能够处理大规模数据,并支持复杂的全文搜索和分析。
然而,Easysearch 并非只是简单的模仿或复制 Elasticsearch。它在多个方面进行了本地化优化,以更好地适应中国市场的独特需求。例如,在处理中文文本时,Easysearch 针对中文的特殊语法结构进行了优化,增强了中文分词的准确性和查询效率。此外,Easysearch 还在性能和可扩展性上进行了改进,使其能够更好地应对大规模企业级应用的需求。
不仅如此,Easysearch 还是国内首个通过搜索型数据库产品能力测试的国产搜索型数据库。自 2023 年 10 月起,Easysearch 凭借其卓越的性能和深度的本土化优化,成功在墨天轮搜索型数据库排行榜上长期占据榜首位置。这一成绩不仅体现了 Easysearch 在技术层面的突破,也反映了市场对其产品的高度认可。在短短几个月的时间里,Easysearch 以其稳定的表现和不断创新的步伐,赢得了众多企业用户的信赖。
![](https://infinilabs.cn/img/blog ... 17.png)
![](https://infinilabs.cn/img/blog ... p4.png)
6.3 Easysearch 与 Elasticsearch 的对比
虽然 Easysearch 与 Elasticsearch 在架构和基本功能上有很多相似之处,但它们在具体的实现和应用场景中表现出了一些显著的差异。
- 中文文本处理:Elasticsearch 虽然支持多语言环境,但其在中文处理上的表现并不如 Easysearch 那么出色。Easysearch 针对中文的语法和分词进行了专门的优化,尤其是在处理同义词、短语匹配和模糊查询时,能够提供更高的准确性。
- 本地化支持:Easysearch 提供了更强的本地化支持,包括符合中国法律法规的安全和合规性功能。此外,它还集成了许多国内常用的第三方系统,简化了企业的集成和部署过程。
- 性能优化:在处理大规模数据集时,Easysearch 通过定制化的优化策略,如特定的索引压缩技术和内存管理方案,提升了系统的响应速度和资源利用率。这使得它在某些特定应用场景下,能够提供比 Elasticsearch 更高的性能和稳定性。
- 安全可靠:Easysearch 提供了多种安全和合规性功能,如 TLS 加密、磁盘加密等。此外,它还支持多种第三方认证方式,如 LDAP、AD
6.4 国产搜索型数据库的未来
根据第一新声研究,2022-2027 年中国数据库整体市场将维持增长态势 ,2024 年整体市场规模预计为 543.1 亿,到 2027 年将增长至 1183.8 亿,2022-2027 年复合增长率达到 30.67%。
![](https://infinilabs.cn/img/blog ... p3.jpg)
随着全球对数据安全和本地化需求的不断增加,国产搜索型数据库在未来有望占据更大的市场份额。
Easysearch 及其他国产数据库将进一步提升技术水平,持续创新,以满足不断变化的市场需求。
全球化与竞争力
虽然当前 Easysearch 主要面向国内市场,但其潜在的全球化前景不容小觑。通过持续的技术创新和市场拓展,Easysearch 及其他国产数据库有望在全球范围内与国际巨头展开竞争,特别是在亚非拉等新兴市场。这不仅有助于提升中国数据库技术的国际影响力,也将推动全球数据库产业的多样化发展。
7. 结论
通过对搜索型数据库的发展历程和未来趋势的探讨,可以看出,随着大数据和人工智能技术的不断进步,搜索型数据库将在更多领域发挥重要作用。Elasticsearch 作为全球领先的搜索型数据库,其开创性的架构和功能为行业树立了标杆。而以 Easysearch 为代表的国产数据库,也正在迅速崛起,展现出强大的竞争力。未来,搜索型数据库将继续朝着多模态、智能化、本地化的方向发展,为全球信息技术的发展提供更加坚实的基础。
参考资料
- [搜索引擎数据库](https://blog.csdn.net/hgstclyh ... 314739)
- [搜索型数据库的技术发展历程与趋势前瞻](https://infinilabs.cn/blog/202 ... bases/)
- [数据库行业分析:国产数据库百花齐放,搜索引擎数据库风口已至](https://new.qq.com/rain/a/20221123A01V1F00)
- [浅谈搜索引擎和传统数据库(ES,solr)](https://blog.csdn.net/weixin_4 ... 643504)
- [什么是 Elasticsearch?](https://www.ibm.com/cn-zh/topics/elasticsearch)
- [INFINI Labs 产品更新 | 重磅推出 Easysearch v1.1](https://infinilabs.cn/blog/2023/release-20230515/)
- [墨天轮中国数据库流行度排行](https://www.modb.pro/dbRank)
- [喜讯!INFINI Easysearch 在墨天轮搜索型数据库排名中荣登榜首](https://infinilabs.cn/blog/2023/news-20230913/)
- [《2024 年中国数据库市场研究报告》重磅发布 | 第一新声](https://news.sina.com.cn/shang ... .shtml)
- [国内首家 | 极限科技率先完成信通院搜索型数据库行业标准测试](http://localhost:1313/blog/202 ... ducts/)
- [危险!超 9000 个 Elasticsearch 集群暴露在公网上](https://infinilabs.cn/blog/202 ... ernet/)
- [从 OpenAI 停服看中国市场:国产替代崛起的机遇与挑战](https://infinilabs.cn/blog/202 ... ising/)
- [什么是数据库](https://aws.amazon.com/cn/what-is/database/)
- [数据库发展史](https://blog.csdn.net/double22 ... 6.235^v43^pc_blog_bottom_relevance_base5&spm=1001.2101.3001.4242.1&utm_relevant_index=1)
关于 Easysearch 有奖征文活动
![黑神话悟空](https://infinilabs.cn//img/blo ... er.png)
无论你是 Easysearch 的老用户,还是第一次听说这个名字,只要你对 INFINI Labs 旗下的 Easysearch 产品感兴趣,或者是希望了解 Easysearch,都可以参加这次活动。
详情查看:[Easysearch 征文活动](https://infinilabs.cn/blog/202 ... ukong/)
作者:李家兴
原文:https://infinilabs.cn/blog/202 ... ases/
- [搜索引擎数据库](https://blog.csdn.net/hgstclyh ... 314739)
【搜索客社区日报】第1880期 (2024-08-13)
社区日报 • God_lockin 发表了文章 • 0 个评论 • 2740 次浏览 • 2024-08-13 17:29
https://towardsdatascience.com ... cbc88
2. 用flink、redpanda构建es索引快如闪电(需要梯子)
https://redpanda-data.medium.c ... c5939
3. 用 pysync 做pg和es的实时同步(需要梯子)
https://medium.com/%40toluaina ... 9b4e9
编辑:斯蒂文
更多资讯:http://news.searchkit.cn