- 博客(5)
- 收藏
- 关注
原创 SolrCloud的读写分离
背景数据库读写分离是一个常见的优化, 可以通过将读和写放在不同的服务器从而提升读的性能. 这篇文章主要说一说Solr的读写分离.默认的Solr架构如图, 默认的SolrCloud(NRT)架构有以下特点:在写上有三种操作:UpdateCommit(硬提交)SoftCommit(软提交)每种操作在逻辑上都是相同的, 即首先把请求发送到对应Shard, 然后Shard先把请求交给leader, leader再把请求分发到所有follower.对于一个Shard的所有节点而言(包括一个
2021-07-07 16:57:58
323
原创 为什么我们需要BitSet
现在假设我们有一个搜索引擎的应用, 文档总数是100w, 文档ID是从0开始的连续自增序列. 每次搜索请求召回的文档数从0到100w之间, 要求你设计一个缓存, 缓存下每一次请求召回的全部文档的ID, 目标是内存占用要尽量少.思路1:直接用一个set保存所有召回的id, 这样的话如果一次请求召回的结果数比较少的时候还好, 在极端情况(召回量为100w时)下, 按一个int 4个byte来算, 最后需要4G内存来保存一次请求的结果.显然有点太大了.思路2:用一个长度为100w的boolean[]来保存
2021-04-21 11:09:42
141
原创 用shunting-yard算法做表达式求解
背景表达式求解这个问题绝对是非常值得搞清楚的一个问题, 一方面在面试中经常会被问到(https://leetcode-cn.com/problems/basic-calculator/), 我就曾不止一次在面试中被问到类似的问题, 然而当时回答的都不理想; 另一方面, 在我们的工作中, 其实会遇到真实的问题需要类似的算法求解, 但是一般是改头换面出现的, 比如我最近遇到一个问题, 业务端传给我一个类似于这样的表达式:a && b && !(c || d)我希望对这个表
2021-04-21 11:06:46
524
1
原创 Solr 子查询语法及原理
本文介绍了solr子查询的语法及实现原理, 并进行了查询复杂度的分析.阅读之前建议先阅读ref中的官方文档或其他类似文档已对solr子查询有基本了解, 本文主要讲解子查询原理.refhttps://lucene.apache.org/solr/guide/8_6/indexing-nested-documents.htmlhttps://lucene.apache.org/solr/guide/8_6/searching-nested-documents.html语法索引先索引一些测试数据.
2021-04-21 10:59:43
903
原创 Solr分布式搜索过程
最近因为工作的关系, 花了不少时间读SolrCloud分布式搜索的相关代码, 自己也做了很多solr源码的相关笔记, 本来想趁这次十一假期总结整理一下, 写一篇solr源码分析的文章, 但是后来发现因为solr本身的复杂性, 如果事无巨细的写源码分析, 很可能就陷在细节出不来了, 这样的结果就是读我这个源码分析还不如直接去读solr源码, 因此后来转换了思路, 本文主要想讲两个主题:目前solr(8.6.0)源码的分布式搜索实现方式, 这部分主要是基于对solr的源码分析.尝试对solr的分布式
2021-04-21 10:55:54
317
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人