旅游景点网站设计,免费的公司起名网,长沙百度做网站多少钱,深圳网站商城定制设计在进行数据查询性能测试的过程中#xff0c;我的同事幺加明对 ES#xff08;Elasticsearch#xff09;和 MySQL 进行了相对较大数据量的测试#xff0c;并整理了相关结果。在得到其授权的情况下#xff0c;我将此对比案例分享给大家#xff0c;在此再次向幺加明表示感谢。…在进行数据查询性能测试的过程中我的同事幺加明对 ESElasticsearch和 MySQL 进行了相对较大数据量的测试并整理了相关结果。在得到其授权的情况下我将此对比案例分享给大家在此再次向幺加明表示感谢。
一、结论
通过对es和mysql相对较大数据量的测试得出结果在Mysql查询使用到合适的索引的条件下通过mysql得到相应结果的速度要明显优于Es。
二、通过es实现 Es 文档数据模型
type Content struct {ContentId int64 json:id // 内容idPermissionType int json:permission_type // 权限类型 0:公开1:仅自己可见2:部分可见3:不给谁看TopicId int json:topic_id // 话题idAllowUser []User json:allow_user // 允许的用户BlockUser []User json:block_user // 屏蔽的用户
}type User struct {Id int64 json:id // 用户id
}
测试数据量及条件
测试 ES 数据量为 2000 万的作品数5000 的用户量此用户量与实际情况有出入理论上应有至少 20 万的用户量。当设置给部分人可见时AllowUser 内有 30 个元素同样当设置不给谁看时BlockUser 内也是有 30 个元素。所以对应的总数据量在 3 亿条左右。
查询条件如下
1、单独查询公开可见数据 查询时间在275毫秒左右 2、单独查询部分可见数据耗时70毫秒左右 3、单独查询部分不可见数据耗时255毫秒左右 4、合并三次查询未一次查询就得到结果的话耗时428毫秒左右 综上所述 采用 Es最快的响应时间为并行执行每次查询耗时在300毫秒以内。 三、通过mysql实现
Mysql 表结构如下
CREATE TABLE content_permission_1 (id int unsigned NOT NULL AUTO_INCREMENT COMMENT 主键自增,content_id int NOT NULL DEFAULT 0 COMMENT 内容id,permission_type tinyint NOT NULL DEFAULT 0 COMMENT 权限类型 0:公开1:仅自己可见2:部分可见3:不给谁看 ,topic_id int NOT NULL DEFAULT 0 COMMENT 话题id,user_id int NOT NULL DEFAULT 0 COMMENT 权限针对的用户id,PRIMARY KEY (id) USING BTREE,KEY idx_content_id (content_id) USING BTREE,KEY idx_user_id_content_id (user_id,content_id)
) ENGINEInnoDB AUTO_INCREMENT1 DEFAULT CHARSETutf8mb4 COMMENT内容权限表可见设置
测试条件及数据量
测试 MySQL 数据量为 1000 万的作品数据总共 1.5 亿权限相关数据。
查询条件如下
1、查询公开数据耗时21毫秒左右 使用到的索引为 idx_content_id 2、查询部分人可见 耗时48毫秒左右 使用到的索引为 idx_user_id_content_id 3、查询部分人不可见耗时13毫秒左右使用到的索引为 idx_content_id 综上所述 采用 mysql最快的响应时间为并行执行每次查询耗时在50毫秒以内
总结
1.mysql建立合适的索引避免回表的情况下其查询性能还是非常优异的。
2.对于 ES 的测试结果其实并不令人意外。不过对于 ES 在字典中查找对应 keyword 的具体方式我充满了好奇。目前我在思考它是否基于二分法进行查找呢毕竟在面对庞大的数据量时如果采用二分法可能会在一定程度上影响查询速度。遗憾的是目前我还没有找到关于 ES 底层查询原理的详细资料所以这仅仅是我的一种猜测罢了。倘若让我来编写这样一个程序在没有更多信息的情况下二分法或许是我首先能想到的一种实现方式。但我深知ES 作为一款成熟的搜索引擎其查询原理必定更加复杂和高效肯定不仅仅局限于简单的二分法。我期待着深入了解 ES 的底层查询机制以便更好地理解和应用它在实际项目中的强大功能。这个问题有时间再做深入研究。
通过这次对比测试我们可以看出在特定的查询场景下MySQL 在性能上有着明显的优势。然而ES 也有其独特的应用场景如全文搜索等。在实际应用中我们需要根据具体的需求来选择合适的数据库技术以达到最佳的性能和效果。