fst

参与 Seata 社区到 go 与 Seata 的邂逅

百般思念 提交于 2020-04-28 12:44:03
  众所周知,这几年微服务、云原生提得很火热。2017年,当时公司的领导刘巍,敏锐得提出公司转型微服务。那时,提到微服务大家一头雾水,经过两年的实践,逐渐有了一些心得。但有个问题始终萦绕在微服务开发者的头上,分布式事务到底如何解决,有没有比较完美的方案?二阶段提交、柔性事务、最终一致性?   2019 年,我注意到阿里巴巴的同学在社区调研分布式事务需求,立即加入了社区群。在 seata 0.2 版本的时候,当时还不叫 seata,叫 fescar,我看到 seata 代码仓库里只有 dubbo 结合 seata 的 sample,随即在博客园写了一篇 spring boot 如何结合 seata 的博文 Spring Boot微服务如何集成seata解决分布式事务问题? ,这篇文章后来被收录到 seata wiki 里面,收获到了 18000+ 的阅读量,是我阅读量最高的一篇博客。   后来,由于工作比较忙,屡次想参与 seata 贡献,发现了几个 bug,本来想修改来着,结果看社区里边已经有人在做了😂。   由于接触微服务,自然而然接触到 k8s 技术,接触到云原生,接触到 golang。个人对 golang 比较感兴趣,比较看好它的未来。看到社区里面也有关于 seata go client 的呼声,遂萌生了打造 golang 版 seata 的想法。   有人问:喂,同学

2020最新Java工程师面试题-Elasticsearch 面试篇(附答案)

戏子无情 提交于 2020-04-23 12:53:51
1、elasticsearch 了解多少,说说你们公司 es 的集群架构,索 引数据大小,分片有多少,以及一些调优手段 。 **面试官:**想了解应聘者之前公司接触的 ES 使用场景、规模,有没有做过比较大 规模的索引设计、规划、调优。 解答: (文末可领取更多面试资料) 如实结合自己的实践场景回答即可。 **比如:**ES 集群架构 13 个节点,索引根据通道不同共 20+索引,根据日期,每日 递增 20+,索引:10 分片,每日递增 1 亿+数据, 每个通道每天索引大小控制:150GB 之内。 仅索引层面调优手段: 1.1、设计阶段调优 1、根据业务增量需求,采取基于日期模板创建索引,通过 roll over API 滚动索 引; 2、使用别名进行索引管理; 3、每天凌晨定时对索引做 force_merge 操作,以释放空间; 4、采取冷热分离机制,热数据存储到 SSD,提高检索效率;冷数据定期进行 shrink 操作,以缩减存储; 5、采取 curator 进行索引的生命周期管理; 6、仅针对需要分词的字段,合理的设置分词器; 7、Mapping 阶段充分结合各个字段的属性,是否需要检索、是否需要存储等。…….. 1.2、写入调优 1、写入前副本数设置为 0; 2、写入前关闭 refresh_interval 设置为-1,禁用刷新机制; 3、写入过程中:采取 bulk

SDOI2017 R2泛做

家住魔仙堡 提交于 2020-04-18 12:13:03
由于各种原因,在bzoj上我day1的题一题都没过,所以这里就直接贴loj的链接好了。 D1T1 龙与地下城 中心极限定理。 https://en.wikipedia.org/wiki/Central_limit_theorem 由于某些原因这里的公式挂了...直接看维基吧... 要算积分可以用标准库里的erf: https://en.wikipedia.org/wiki/Error_function 。 对于正态分布 ,值落在[-x,x]的概率为 ,所以落在[0,x]的概率就是这个值的一半,这玩意儿就可以直接当做不定积分了。 #include <iostream> #include <stdio.h> #include <math.h> #include < string .h> #include <time.h> #include <stdlib.h> #include < string > #include <bitset> #include <vector> #include < set > #include <map> #include <queue> #include <algorithm> #include <sstream> #include <stack> #include <iomanip> using namespace std; #define pb

互联网 Java 工程师面试题系列(Elasticsearch 面试题)

烈酒焚心 提交于 2020-04-18 04:02:46
1、elasticsearch 了解多少,说说你们公司 es 的集群架构,索引数据大小,分片有多少,以及一些调优手段 。 面试官:想了解应聘者之前公司接触的 ES 使用场景、规模,有没有做过比较大 规模的索引设计、规划、调优。 解答: 如实结合自己的实践场景回答即可。 比如:ES 集群架构 13 个节点,索引根据通道不同共 20+索引,根据日期,每日 递增 20+,索引:10 分片,每日递增 1 亿+数据, 每个通道每天索引大小控制:150GB 之内。 仅索引层面调优手段: 1.1、设计阶段调优 1、根据业务增量需求,采取基于日期模板创建索引,通过 roll over API 滚动索 引; 2、使用别名进行索引管理; 3、每天凌晨定时对索引做 force_merge 操作,以释放空间; 4、采取冷热分离机制,热数据存储到 SSD,提高检索效率;冷数据定期进行 shrink 操作,以缩减存储; 5、采取 curator 进行索引的生命周期管理; 6、仅针对需要分词的字段,合理的设置分词器; 7、Mapping 阶段充分结合各个字段的属性,是否需要检索、是否需要存储等。…….. 1.2、写入调优 1、写入前副本数设置为 0; 2、写入前关闭 refresh_interval 设置为-1,禁用刷新机制; 3、写入过程中:采取 bulk 批量写入; 4、写入后恢复副本数和刷新间隔; 5

财务平台亿级数据量毫秒级查询优化之elasticsearch原理解析

て烟熏妆下的殇ゞ 提交于 2020-03-01 08:28:30
说在前面 财务平台进行分录分表以后,随着数据量的日渐递增,业务人员对账务数据的实时分析响应时间越来越长,体验性慢慢下降,之前我们基于mysql的性能优化做了一遍,可以说基于mysql该做的优化已经基本上都做了,本次是基于elasticsearch对其做进一步的性能优化 正文 mysql索引原理 基于mysql最常用也最直接有效的性能优化也就是添加索引。 mysql索引是怎么实现的呢?数据库最基本的查询算法是顺序查找,时间复杂度为O(n),显然在数据量很大的时候很低,优化的查询算法有二分查找,二叉树查找,虽然查找效率提高了,但是各自对检索的数据都有要求,二分查找检索被要求数据是有序的,而二叉树查找只能用于二叉树上,但是数据本身的组织结构不可能完全满足各种数据结构,例如,理论上不可能同时将两列都按顺序进行组织,所以在数据之外,数据库系统还维护者满足特定查找算法的数据结构,这些数据结构以某种方式引用数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。 索引是什么?索引是存储引擎用于快速找到记录的一种数据结构,这是索引的基本功能,主要基于hash,b+tree。 我们开发当中一般用到都是mysql innoDB引擎,采用的是b+tree。 b+tree的优势主要体现在查询性能上,在单元素查询时,b+tree会自顶层向下逐层查找节点,最终找到我们需要的叶子节点,范围查询时

Serialization和Marshaling有什么区别?

点点圈 提交于 2020-02-26 05:29:45
我知道,就几种分布式技术(如RPC)而言,使用术语“编组”但不理解它与序列化的区别。 它们不是都将对象转换为一系列位吗? 有关: 什么是序列化? 什么是对象编组? #1楼 两者都有一个共同点 - 即 序列化 对象。 序列化用于传输对象或存储它们。 但: 序列化: 序列化对象时,只将该对象中的成员数据写入字节流; 而不是实际实现对象的代码。 编组: 当我们讨论 将Object传递给远程对象(RMI) 时使用术语编组。 在编组对象中序列化(成员数据被序列化) + 附加了代码库。 因此序列化是编组的一部分。 CodeBase 是告诉Object的接收者可以找到该对象的实现的信息。 任何认为它可能将对象传递给之前可能没有看到它的另一个程序的程序必须设置代码库,以便接收方可以知道从哪里下载代码,如果它没有本地可用的代码。 在对对象进行反序列化时,接收器将从中获取代码库并从该位置加载代码。 #2楼 我对编组的理解与其他答案不同。 连载: 使用约定生成或重新水化对象图的线格式版本。 编组: 使用映射文件生成或重新生成对象图的线型版本,以便可以自定义结果。 该工具可以从遵守惯例开始,但重要的区别在于自定义结果的能力。 合同优先发展: 在合同首次开发的背景下,编组很重要。 它可以对内部对象图进行更改,同时保持外部接口随时间稳定。 这样,不必为每个微不足道的变化修改所有服务订户。

Lucene索引存储结构

女生的网名这么多〃 提交于 2020-02-26 01:15:56
字典数据结构: 字典树(Trie tree) 、FST 字典树(Trie tree) 典型应用是用于统计和排序大量的 字符串 (但不仅限于字符串), 所以经常被搜索引擎系统用于文本词频统计。 它的优点是:最大限度地减少无谓的字符串比较,查询效率比 哈希表 高。 基本的实现有array与linked-list两种: array实现: linked-list实现: 双数组Trie树 在Trie数实现过程中,我们发现了每个节点均需要 一个数组来存储next节点,非常占用存储空间,空间复杂度大, 双数组Trie树正是解决这个问题的。 双数组Trie树(DoubleArrayTrie)是一种空间复杂度低的Trie树, 应用于字符区间大的语言(如中文、日文等)分词领域。 双数组的原理是,将原来需要多个数组才能表示的Trie树,使用两个数组就可以存储下来,可以极大的减小空间复杂度 使用两个数组base和check来维护Trie树, base负责记录状态, check负责检查各个字符串是否是从同一个状态转移而来, 当check[i]为负值时,表示此状态为字符串的结束。 check[i] 代表从什么状态转换过来,如下,都是从base[t] 转换过来,所以 check[ta] = check[tb] base[t] + a.code = base[ta] base[t] + b.code = base

ES索引,映射和分析

佐手、 提交于 2020-01-07 01:49:40
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Elasticsearch中的字段类型可以分为两类:精确值和全文。 精确值 如它们听起来那样精确。例如日期或者用户 ID,但字符串也可以表示精确值,例如用户名或邮箱地址。对于精确值来讲,Foo 和 foo 是不同的,2014 和 2014-09-15 也是不同的。另一方面, 全文 是指文本数据(通常以人类容易识别的语言书写),例如一个推文的内容或一封邮件的内容。 精确值很容易查询。结果是二进制的:要么匹配查询,要么不匹配。查询全文数据要微妙的多。我们问的不只是“这个文档匹配查询吗”,而是“该文档匹配查询的程度有多大?”换句话说,该文档与给定查询的相关性如何?为了促进这类在全文域中的查询,Elasticsearch 首先 分析 文档,之后根据结果创建 倒排索引 ,分析然后建立索引是ES处理文档的方式。 倒排索引 Elasticsearch 使用一种称为 倒排索引 的结构,它适用于快速的全文搜索。一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表。ES会为每个字段建立一个倒排索引,每个倒排索引最基本的结构就是“keyword”和“Posting List”,Posting list就是一个int的数组,存储了所有符合某个term的文档id。 另外

Redis 使用 fst 进行序列化

烈酒焚心 提交于 2019-12-26 19:07:30
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 添加 maven 依赖 <!-- redis serializer --> <dependency> <groupId>de.ruedigermoeller</groupId> <artifactId>fst</artifactId> <version>2.57</version> </dependency> 实现 RedisSerializer 接口 public class FSTSerializer implements RedisSerializer<Object> { private FSTConfiguration fstConfiguration ; public FSTSerializer() { fstConfiguration = FSTConfiguration.getDefaultConfiguration(); fstConfiguration.setClassLoader(Thread.currentThread().getContextClassLoader()); } @Override public byte[] serialize(Object obj) { if (ObjectUtil.isEmpty(obj)) { return null; } return

ElasticSearch相关

北战南征 提交于 2019-12-16 19:30:19
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Elastic Search的结构概念:集群,节点,分片,备份。 关系数据库 ⇒ 数据库 ⇒ 表 ⇒ 行 ⇒ 列(Columns) Elasticsearch ⇒ 索引 ⇒ 类型 ⇒ 文档 ⇒ 字段(Fields) 1.Elastic Search 所有的 filed都加索引,倒排索引。 FST 以字节方式存储所有的term, 这种压缩方式可以有效的缩减存储空间,使得term index 足以放进内存,但是这种方式也会导致查找的时候需要更多地CPU资源。 post list的压缩技巧:bitmap为基础,使用Roaring bitmaps进行进一步压缩,将posting list按照65535为界限分块,比如第一块所包含的文档id范围在0~65535之间,第二块的id范围是65536~131071,以此类推。再用<商,余数>的组合表示每一组id,这样每组里的id范围都在0~65535内了,剩下的就好办了,既然每组id不会变得无限大,那么我们就可以通过最有效的方式对这里的id存储。 2.联合索引 使用跳表的数据结构快速做“与”运算,或者利用bitmap按位进行“与” 3.Elastic Search检索这么快: 1.索引,2.压缩机制【bitmap -> Roaring Bitmap】,3