备注:本内参系列,是学习TinyMQ项目之前的必读内容!为了实现集群的高可用性,用户的数据往往要多重备份,多个副本虽然避免了单点故障,但同时也引入了新的挑战。假设有一组服务器保存了用户的余额,初始是100块,现在用户提交了两个订单,一个订单是消费10元,一个订单是充值50元。由于网络错误和延迟等原因,导致一部分服务器只收到了第一个订单(余额更新为90元...

备注:本内参系列,是学习TinyMQ项目之前的必读内容!在Java中,synchronized修饰的是代码块,代码块里面的变量都实现了内存可见性。内存可见性的底层是CPU的指令实现的。volatile修饰的是变量,它的作用也是实现内存可见性,底层用的同一个CPU指令。可以这样理解:synchronized里面的变量都是volatile修饰的。我们都用过...

备注:本内参系列,是学习TinyMQ项目之前的必读内容!数据在哪里存在呢?只在内存吗?不是的。数据在内存中存在,但是当用的时候会加载到CPU的寄存器里面。内存和寄存器是两个地方,从而出现了新的名词:内存可见性和寄存器可见性。为什么叫内存可见性呢?感觉很奇怪的名字。其实,明白以下道理就不奇怪了。数据的流动过程是:内存->寄存器->计算器很多时...

备注:本内参系列,是学习TinyMQ项目之前的必读内容!一致性问题立足于数据副本,有数据副本的地方必定会有一致性问题。对于数据副本,人们往往印象不深,但是对于缓存,我想人人皆知。缓存就是数据副本。我们知道,数据存在于内存中,然后被加载到寄存器中,此时出现了两个数据副本,如何保证两者的一致性呢?这就是一致性问题的起源。一致性问题并不是分布式领域才有的问题...

备注:本内参系列,是学习TinyMQ项目之前的必读内容!数据副本是个很常见的概念和术语,我们经常遇到,但是也最容易让人产生迷惑。副有以下几种含义:(1)辅助的,区别于正和主,例如:副职,副手,副官。(2)附带的,次要的,例如:副业,副品,副食,副刊。(3)相配、相称之意,例如:名实相副,其实难副。(4)量词,表示一组或一套,例如:一副手套,全副武装;也...

简单的来说,over sharding 是分片过度的意思。理解这个问题,需要从elasticsearch的分片机制说起。一个索引可以存储超出单个结点硬件限制的大量数据。比如,一个具有10亿文档的索引占据1TB的磁盘空间,而任一节点都没有这样大的磁盘空间,或者单个节点处理搜索请求,响应太慢。为了解决这个问题,Elasticsearch提供了将索引划分成多...

日前Elastic发布了Elasticsearch 7.10.0。该版本基于Apache Lucene 8.7.0开发,支持在Elasticsearch 在线弹性云和自建实例使用。新版本的主要特征有:1、搜索快照可存储更多内容。由于企业数据每天都以指数级的速率增长,尤其是日志和监控数据。很多企业都在用Elasticsearch收集和存储数据,用来做实时...

1、封面介绍2、出版时间2020年3月3、推荐理由本书基于Elasticsearch 7.X版本编写,内容由浅入深,先教会初学者使用,再介绍背后的原理。本书共分为三大部分,分别是Elasticsearch前传、Elasticsearch实战、Elasticsearch生态。Elasticsearch前传部分主要介绍搜索技术发展史和基本知识,并介绍搜索引...

Elasticsearch的核心数据结构是倒排索引,其分为三个部分,如下所示:更多介绍,请移步:《Elasticsearch入门教程13:倒排索引原理介绍》为了查询的高效,Elasticsearch对于Term Index和Posting List两部分,分别采用了不同的压缩技巧。1、Term Index的压缩Elasticsearch用FST(Fin...

1、文本分析与分词文本分析(Analysis)是把全文本转换一系列单词(term/token)的过程,也称为分词。当一个文档被索引时,每个Term都可能会创建一个倒排索引。倒排索引的过程就是将文档通过分词器(Analyzer)分成一个一个的Term,每一个Term都指向包含这个Term的文档集合。2、分析器组成分析器(Analyzer)都由三部分组成的...

分布式系统中各个节点的地位是均等的,是不过角色不同而已,有的是 leader ,而有的是 flower。这种区分 leader 和 flower 的集群更好管理些,因为执行写操作的时候都交给 leader 去处理,然后由 leader 再将数据同步给各个 flower 上的副本。读的时候可以从 flower 上读取,也可以从 leader 上读取,分散...

MySQL数据库的系统时区,其实是分两种的,一种是MySQL的全局时区,另外一种是当前会话的时区,如果当前会话不指定时区,就默认使用全局时区。> select curtime(); #或select now()也可以 +-----------+ | curtime() | +-----------+ | 15:18:10 | +-------...

在导出MYSQL数据库脚本的时候,我们常常会发现有这么一个设置:SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";我们不禁疑问:这种设置有什么用呢?这个设置的意思是MYSQL中的自增长列可以从0开始。默认情况下自增长列是从1开始的,如果你插入值为0的数据会报错,设置这个之后就可以正常插入为0的数据了。

1、什么是倒排索引?倒排索引(Inverted Index)也叫反向索引,有反向索引必有正向索引。通俗地来讲,正向索引是通过key找value,反向索引则是通过value找key。先来回忆一下我们是怎么插入一条索引记录的:curl -X PUT "localhost:9200/user/_doc/1" -H 'Content-Typ...

1、Logstash是什么?Logstash是一个开源数据收集引擎,具有实时管道功能。Logstash可以动态地将来自不同数据源的数据统一起来,并将数据标准化到你所选择的目的地。如下图所示:2、Logstash的数据输入数据往往以各种各样的形式,或分散或集中地存在于很多系统中。Logstash 支持各种输入选择 ,可以在同一时间从众多常用来源捕捉事件。...