我发起了 一个 海量文本 分析 和 建立索引 的 开源项目 EasySearch

这篇文章 的 起因 是 这几天 受到  老郭 的 启发  。

 

老郭 爱 捣鼓,   这几天 又跟 我 提到  ElasticSearch + log4net ,,,    嗯, 这不,  我又 从 他 那里 学到了 一些 东西  。

 

 

ElasticSearch + log4nett    确实 不错,    功能 很酷,    界面 也很酷   。   见    http://kingmoo.cn  

 

 

于是,   我又想 搞 一个 开源项目,   像  ElasticSearch  这样 的  。

 

 

ElasticSearch    的 基本功能 无非 就是   海量文本 分析 和 建立索引  。

 

这些 在 技术上 没有什么 问题 ,

 

有关  文本分析 ,   见  《SelectDataTable》  https://www.cnblogs.com/KSongKing/p/9455216.html      ,

《自己写一个 C 语言 编译器 InnerC》    https://www.cnblogs.com/KSongKing/p/11013210.html      ,

《自己写一个 正则表达式 引擎》          https://www.cnblogs.com/KSongKing/p/11013210.html         。

 

有关 索引,   见 《我发起了一个 .Net 开源 数据库 项目 SqlNet》    https://www.cnblogs.com/KSongKing/p/9501739.html     ,

《出一道题 : 二分法 是 n 分法 中 最快 的 吗 ?》    https://www.cnblogs.com/KSongKing/p/13732788.html      。

 

也可以 用  Hash 表 的 方式 建立 索引,   有关 Hash 表,   见  《自己写一个 Hash 表》   https://www.cnblogs.com/KSongKing/p/10425152.html      。

 

当然,  还会用到 大规模并行计算,  也可以说是 分布式计算,  有关   分布式计算,  见  《利用 MessageRPC 和 ShareMemory 来实现 分布式并行计算》   https://www.cnblogs.com/KSongKing/p/9490915.html      。

 

 

 

关于  ElasticSearch  ,      可以 看看 :

 

《DB与Elasticsearch混合之应用系统场景分析探讨》          https://www.toutiao.com/i6890739219753337347/?tt_from=weixin&utm_campaign=client_share&wxshare_count=1&timestamp=1604504584&app=news_article&utm_source=weixin&utm_medium=toutiao_android&use_new_style=1&req_id=202011042343030102020891685F0D35D3&group_id=6890739219753337347

 

《Elasticsearch的功能、使用场景以及特点》         https://www.cnblogs.com/ylht/p/10178706.html

 

 

 

相比 关系数据库 和 其它 NoSql 数据库,   ElasticSearch  的 特点 :

 

1      可以对 所有 字段 建立索引

2      可以对 任意表 任意字段 组合查询, 这 意味着 可以 对 任意表 任意字段 建立 联合索引

 

其实 关系数据库 也可以 做到 这 2 点,   为什么 关系数据库 不做 呢 ?

 

因为  关系数据库 的 核心任务 是 事物(交易),  ACID,  数据完整性  ,   所以 不宜 去做 索引大泛滥  。

 

但 事实上,  关系数据库 在 这方面 也 做过 尝试 和 努力,  比如 列索引  。

 

另一方面,   ElasticSearch  可以 大规模 扩展节点,    关系数据库 要 这样做 也 比较难,  虽然 有 CockroachDB 还有 Google 的 BigTable  等等 这些 分布式关系数据库  。

 

但是,  这些 分布式关系数据库 还要用 原子钟 来 同步时间 以 获得 异地 的 数据完整性,   且 分布式 意味着 交易 的 时间 可能 更长  。

 

所以,  根本上,   关系数据库 的 核心任务 是 ACID,    而 ElasticSearch 不关心 实时 的 数据变化,  只管查询  。

 

这是 两者 表现 差异 的 根本原因  。

 

 

事实上,     MongoDB 可以像  ElasticSearch  这样做,   但  Mongo 的 设计 初衷 可能 更 对象化 一些,   比如 一个 老师 对应 多个 学生,   通过 主外键 关联 这一类,   不太侧重 任何字段 建立索引 和 任意表 的 任意字段 组合索引  。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2020-11-06 00:37  凯特琳  阅读(237)  评论(0编辑  收藏  举报

导航