使用 Easysearch,日志存储少一半

文章对比了Elasticsearchv6.4.3与Easysearchv1.1在处理相同日志数据时的索引大小,显示Easysearch通过ZSTD压缩算法和文档源复用功能显著降低了索引膨胀率,从而减少存储成本并提升查询效率。Easysearch是一个轻量级的Elasticsearch替代品,专注于搜索业务场景的优化。

在海量日志存储场景中,索引膨胀率是一个关键指标,直接影响存储成本和查询性能。它表示原始数据与索引数据在磁盘上所占空间的比率。较高的索引膨胀率不仅增加了存储成本,而且可能会影响查询速度,尤其是在 I/O 密集型的查询中。因此,我们需要密切关注和优化索引膨胀率。接下来,我们将比较 Elasticsearch 和 Easysearch 在处理相同数据时的索引膨胀率。

测试结果

一图胜千言,下图是 Easysearch v1.1 和 Elasticsearch v6.4.3 的索引大小测试对比,Y 轴单位是 MB。

使用 Easysearch v1.1 的压缩功能,比 Elasticsearch v6.4.3 的索引大小降低了 50%。

测试说明

以下是对 Elasticsearch v6.4.3 版本,测试数据 500 万条大小 1.054G(1080M)的 nginx 日志,使用 es 默认的 mapping,分别用 best_compression 和 default 的压缩策略进行写入。
Elasticsearch v6.4.3

<
索引 大小(MB) 膨胀率 条数(万)
nginx_default_1g 1812.61 1.61 500
nginx_best_1g 1551.36 1.42 500
### EasySearch 技术概述 EasySearch 是一种广泛应用于搜索功能实现的技术,它既可以作为库(Library),也可以作为框架(Framework)或工具(Tool)来使用。以下是关于 EasySearch 的技术内容及其实现方式的详细介绍。 #### 1. EasySearch Library EasySearch Library 是一种轻量级的搜索库,通常用于在应用程序中快速集成搜索功能。它可以处理文本、文档或数据库中的数据检索任务。以下是一个简单的示例代码,展示如何在 C# 中使用类似的搜索库进行文件解压后的搜索操作[^1]: ```csharp private List<string> PerformSearch(string save_path, string keyword) { List<string> results = new List<string>(); try { foreach (string file in System.IO.Directory.GetFiles(save_path, "*.*", System.IO.SearchOption.AllDirectories)) { string content = System.IO.File.ReadAllText(file); if (content.Contains(keyword)) { results.Add(file); } } } catch (Exception e) { System.Diagnostics.Debug.WriteLine(e.Message); } return results; } ``` 此代码片段展示了如何在解压后的文件夹中搜索包含特定关键字的文件。 #### 2. EasySearch Framework EasySearch Framework 提供了更高级的功能,例如全文索引、模糊匹配和高性能查询。这种框架通常需要配置额外的参数以支持多架构环境下的运行。例如,在 Xcode 中解决架构问题时,可以通过设置 `EXCLUDED_ARCHS` 来确保框架兼容性[^2]: ```bash EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_simulator__NATIVE_ARCH_64_BIT_x86_64=arm64 arm64e armv7 armv7s armv6 armv8 EXCLUDED_ARCHS=$(inherited) $(EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_$(EFFECTIVE_PLATFORM_SUFFIX)__NATIVE_ARCH_64_BIT_$(NATIVE_ARCH_64_BIT)) ``` 这些设置可以避免在模拟器上运行时出现的架构缺失问题。 #### 3. EasySearch Tool EasySearch Tool 是一种独立的工具,通常用于开发者快速测试搜索逻辑或调试复杂查询。例如,在 Unity3D 环境中,可以通过自定义构建后处理脚本来嵌入动态库框架,从而增强搜索功能[^3]: ```csharp using UnityEditor; using UnityEditor.Callbacks; using System.IO; public class PostProcessBuildClass { [PostProcessBuildAttribute(1)] public static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject) { if (target == BuildTarget.iOS) { string easySearchFrameworkPath = Path.Combine(pathToBuiltProject, "Frameworks/EasySearch.framework"); if (Directory.Exists(easySearchFrameworkPath)) { Debug.Log("EasySearch Framework is embedded successfully."); } else { Debug.LogError("Failed to embed EasySearch Framework."); } } } } ``` 这段代码展示了如何在 Unity3D 构建过程中自动嵌入 EasySearch 动态库框架。 #### 4. 易语言中的 EasySearch 实现 在易语言环境中,如果需要解决类似“内核库未找到”的问题,可以通过修改注册表路径来指定正确的库位置[^4]。例如: ```plaintext HKEY_USERS\S-1-5-21-1039208482-1703432605-1516436592-1000\Software\FlySky\E\Install\Path ``` 将上述路径值设置为易语言安装目录,例如:`C:\Program Files (x86)\e\lib\`。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值