leaf

美团Leaf分布式ID生成策略

别说谁变了你拦得住时间么 提交于 2020-12-22 23:51:16
ID生成原则 全局唯一性:不能出现重复的ID号,既然是唯一标识,这是最基本的要求。 趋势递增:在MySQL InnoDB引擎中使用的是聚集索引,由于多数RDBMS使用B-tree的数据结构来存储索引数据,在主键的选择上面我们应该尽量使用有序的主键保证写入性能。 信息安全:如果ID是连续的,恶意用户的扒取工作就非常容易做了,直接按照顺序下载指定URL即可;如果是订单号就更危险了,竞对可以直接知道我们一天的单量。所以在一些应用场景下,会需要ID无规则、不规则。 segment号段模式 重要字段说明:biz_tag用来区分业务,max_id表示该biz_tag目前所被分配的ID号段的最大值,step表示每次分配的号段长度。 test_tag在第一台Leaf机器上是1~1000的号段,当这个号段用完时,会去加载另一个长度为step=1000的号段,假设另外两台号段都没有更新,这个时候第一台机器新加载的号段就应该是3001~4000。同时数据库对应的biz_tag这条数据的max_id会从3000被更新成4000,更新号段的SQL语句如下: UPDATE table SET max_id=max_id+step WHERE biz_tag= xxx SELECT tag, max_id, step FROM table WHERE biz_tag =xxx 实时监控: 优点:

TypeScript学习笔记

橙三吉。 提交于 2020-12-20 01:19:22
TypeScript是JavaScript的一个超集,支持ECMAScript 6标准。 1. tsc命令 我们可以使用tsx命令来执行TypeScript的相关代码,通常使用.ts作为TypeScript代码文件的扩展名。 tsc 常用编译参数 序号 编译参数说明 1. --help 显示帮助信息 2. --module 载入扩展模块 3. --target 设置 ECMA 版本 4. --declaration 额外生成一个 .d.ts 扩展名的文件。 tsc ts - hw . ts -- declaration 以上命令会生成 ts-hw.d.ts、ts-hw.js 两个文件。 5. --removeComments 删除文件的注释 6. --out 编译多个文件并合并到一个输出的文件 7. --sourcemap 生成一个 sourcemap (.map) 文件。 sourcemap 是一个存储源代码与编译代码对应位置映射的信息文件。 8. --module noImplicitAny 在表达式和声明上有隐含的 any 类型时报错 9. --watch 在监视模式下运行编译器。会监视输出文件,在它们改变时重新编译。 2.TypeScript基础类型 Any类型:任意值是TypeScript针对变成时类型不明确的变量使用的一种数据类型。 null:“什么都没有”

必看!PHP常见面试题——MySQL篇(一)

怎甘沉沦 提交于 2020-12-18 12:55:35
1. 说说自己对于 MySQL 常见的两种存储引擎:MyISAM与InnoDB的理解? InnoDB 引擎: InnoDB 引擎提供了对数据库 acid 事务的支持,并且还提供了行级锁和外键的约束,它的设计的目标就是处理大数据容量的数据库系统。MySQL 运行的时候,InnoDB 会在内存中建立缓冲池,用于缓冲数据和索引。但是该引擎是不支持全文搜索,同时启动也比较的慢,它是不会保存表的行数的,所以当进行 select count() from table 指令的时候,需要进行扫描全表。由于锁的粒度小,写操作是不会锁定全表的,所以在并发度较高的场景下使用会提升效率的。 MyIASM 引擎: MySQL 的默认引擎,但不提供事务的支持,也不支持行级锁和外键。因此当执行插入和更新语句时,即执行写操作的时候需要锁定这个表,所以会导致效率会降低。不过和 InnoDB 不同的是,MyIASM 引擎是保存了表的行数,于是当进行 select count() from table 语句时,可以直接的读取已经保存的值而不需要进行扫描全表。所以,如果表的读操作远远多于写操作时,并且不需要事务的支持的,可以将 MyIASM 作为数据库引擎的首选。 2. 谈谈你对MySQL索引的理解? MySQL索引使用的数据结构主要有BTree索引 和 哈希索引 。对于哈希索引来说,底层的数据结构就是哈希表

分布式ID雪花算法-解析

旧巷老猫 提交于 2020-12-15 07:34:30
前言 雪花算法是用来在分布式场景下生成唯一ID的。 背景 雪花算法:雪花算法的原始版本是scala版,用于生成分布式ID(纯数字,时间顺序),订单编号等。 自增ID:对于数据敏感场景不宜使用,且不适合于分布式场景。 GUID:采用无意义字符串,数据量增大时造成访问过慢,且不宜排序。 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。 有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。 而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cassandra,因为Cassandra没有顺序ID生成机制,为了满足Twitter每秒上万条消息的请求,每条消息都必须分配一条唯一的id,这些id还需要一些大致的顺序(方便客户端排序),并且在分布式系统中不同机器产生的id必须不同,所以twitter开发了这样一套全局唯一ID生成服务。 叙述 算法详解 1位 ,不用。二进制中最高位为1的都是负数,但是我们生成的id一般都使用整数,所以这个最高位固定是0 41位 ,用来记录时间戳(毫秒)。 41位可以表示个数字, 如果只用来表示正整数(计算机中正数包含0),可以表示的数值范围是:0 至

机器学习【初探建模那些事儿】(五)

淺唱寂寞╮ 提交于 2020-12-11 12:59:05
https://zhuanlan.zhihu.com/p/106927814 本篇你将了解过拟合和欠拟合的概念,并且能够使得你的模型更准确 (一)尝试不同的模型 既然你有一种可靠的方法来测量模型精度,那么你可以尝试使用其他模型,并查看哪种模型可以提供最佳预测。 可以在scikit-learn的文档中看到决策树模型有很多选项(比你想要的或需要的更多)。 最重要的选项决定了树的深度。 回想一下这个微课程的第一课,树的深度是衡量它在进行预测之前分裂的数量。 这是一棵相对较浅的树 在实践中,树在顶层(所有房屋)和叶子之间有10个分裂并不罕见。随着树木越来越深,数据集被切成了更少房屋的树叶。如果树只有1个分割,则将数据分为2组。如果每组再次拆分,我们将获得4组房屋。再次拆分每个将创建8个组。如果我们通过在每个级别添加更多分组来保持组的数量翻倍,那么当我们到达第10级时,我们将拥有210组房屋。这是1024片叶子。 当我们将房屋分成许多树叶时,每片叶子中的房屋数量也会减少。拥有极少数房屋的树叶将做出与房屋实际值非常接近的预测,但它们可能会对新数据做出非常不可靠的预测(因为每个预测仅基于少数房屋)。 这是一种称为过度拟合的现象,其中模型几乎完美地匹配训练数据,但在验证和其他新数据方面表现不佳。另一方面,如果我们使树很浅,它不会将房屋分成非常不同的组。 在极端情况下,如果一棵树将房屋分成2或4

机器学习【初探建模那些事儿】(五)

蹲街弑〆低调 提交于 2020-12-11 12:58:41
https://zhuanlan.zhihu.com/p/106927814 本篇你将了解过拟合和欠拟合的概念,并且能够使得你的模型更准确 (一)尝试不同的模型 既然你有一种可靠的方法来测量模型精度,那么你可以尝试使用其他模型,并查看哪种模型可以提供最佳预测。 可以在scikit-learn的文档中看到决策树模型有很多选项(比你想要的或需要的更多)。 最重要的选项决定了树的深度。 回想一下这个微课程的第一课,树的深度是衡量它在进行预测之前分裂的数量。 这是一棵相对较浅的树 在实践中,树在顶层(所有房屋)和叶子之间有10个分裂并不罕见。随着树木越来越深,数据集被切成了更少房屋的树叶。如果树只有1个分割,则将数据分为2组。如果每组再次拆分,我们将获得4组房屋。再次拆分每个将创建8个组。如果我们通过在每个级别添加更多分组来保持组的数量翻倍,那么当我们到达第10级时,我们将拥有210组房屋。这是1024片叶子。 当我们将房屋分成许多树叶时,每片叶子中的房屋数量也会减少。拥有极少数房屋的树叶将做出与房屋实际值非常接近的预测,但它们可能会对新数据做出非常不可靠的预测(因为每个预测仅基于少数房屋)。 这是一种称为过度拟合的现象,其中模型几乎完美地匹配训练数据,但在验证和其他新数据方面表现不佳。另一方面,如果我们使树很浅,它不会将房屋分成非常不同的组。 在极端情况下,如果一棵树将房屋分成2或4

一类树上问题的解决办法

感情迁移 提交于 2020-12-05 01:41:41
[TOC] 本文参考自 梁晏成《树上数据结构》 ,感谢他在雅礼集训的讲解。 转化成序列问题 dfs序 按照 $dfs$ 的入栈顺序形成一个序列。 例如对于这棵树 它的 $dfs$ 序就是 $1~2~3~4~5~6~7~8$ 。(假设我遍历儿子是从左到右的) 树链剖分的运用 对于这个我们常常配合 树链剖分 来使用。 这样对于一个点,它的子树编号是连续的一段区间,便于做子树修改以及查询问题。 重链上所有节点的标号也是连续的一段区间。 所以我们可以解决大部分链或子树修改以及查询的问题,十分的优秀。 也就是常常把树上问题转化成序列问题的通用解法。 括号序列 $dfs$ 时候,某个节点入栈时加入左括号,出栈时加入右括号。 也就是在 $dfs$ 序旁边添加括号。 同样对于上面那颗树 。 为了方便观看,我们在其中添入一些数字。 它的括号序列就是 $(1(2)(3(4)(5(6(7))))(8))$ 。 求解树上距离问题 这个可以对于一些有关于树上距离的问题有用,比如 BZOJ1095 [ZJOI2007] Hide 捉迷藏 (括号序列 + 线段树) 也就是对于树上两点的距离,就是他们中间未匹配的括号数量。这个是很显然的,因为匹配的括号必定不存在于他们之间的路径上,其他的都存在于他们的路径上。 也就是说向上路径的括号是 $)$ 向下路径的括号就是 $($ 。 树上莫队转化成普通莫队 令 $L_x$

关于XFS文件系统概述

﹥>﹥吖頭↗ 提交于 2020-12-04 10:00:29
前言: 目前XFS已成为Linux主流的文件系统,所以有必要了解下其数据结构和原理。 XFS文件系统 XFS是一个日志型的文件系统,能在断电以及操作系统崩溃的情况下保证数据的一致性。XFS最早是针对IRIX操作系统开发的,后来移植到linux上,目前CentOS 7已将XFS作为默认的文件系统。使用XFS已成为了潮流,所以很有必要了解下其数据结构和原理。 XFS官方说明文档参考: https://xfs.org/docs/xfsdocs-xml-dev/XFS_Filesystem_Structure//tmp/en-US/html/index.html 接下来将介绍XFS的一些概念,包括分配组、超级块、inode等等,过程中会结合xfs_db(xfs提供的输出文件系统信息的工具)打印一些信息,了解当前XFS的实时数据。 分配组(Allocation Group) XFS将空间分为若干个分配组,每个分配组大小相等(最后一个可能不等)。分配组包含有超级块、inode管理和剩余空间管理等,所以分配组可以认为是一个单独的文件系统。正是分配组这样的设计,使得XFS拥有了并行IO的能力。在单个分区上使用XFS体现不了这种并行IO能力,但是如果文件系统跨越多个物理硬件比如ceph,并行IO将大大提高吞吐量利用率。 上图为分配组的结构图,重点关注前面4个扇区,从上到下分别为超级块、空闲块信息

关于XFS文件系统概述

安稳与你 提交于 2020-12-03 01:20:47
前言: 目前XFS已成为Linux主流的文件系统,所以有必要了解下其数据结构和原理。 XFS文件系统 XFS是一个日志型的文件系统,能在断电以及操作系统崩溃的情况下保证数据的一致性。XFS最早是针对IRIX操作系统开发的,后来移植到linux上,目前CentOS 7已将XFS作为默认的文件系统。使用XFS已成为了潮流,所以很有必要了解下其数据结构和原理。 XFS官方说明文档参考:https://xfs.org/docs/xfsdocs-xml-dev/XFS_Filesystem_Structure//tmp/en-US/html/index.html 接下来将介绍XFS的一些概念,包括分配组、超级块、inode等等,过程中会结合xfs_db(xfs提供的输出文件系统信息的工具)打印一些信息,了解当前XFS的实时数据。 分配组(Allocation Group) XFS将空间分为若干个分配组,每个分配组大小相等(最后一个可能不等)。分配组包含有超级块、inode管理和剩余空间管理等,所以分配组可以认为是一个单独的文件系统。正是分配组这样的设计,使得XFS拥有了并行IO的能力。在单个分区上使用XFS体现不了这种并行IO能力,但是如果文件系统跨越多个物理硬件比如ceph,并行IO将大大提高吞吐量利用率。 上图为分配组的结构图,重点关注前面4个扇区,从上到下分别为超级块、空闲块信息

机器学习经典算法之KNN

▼魔方 西西 提交于 2020-11-30 01:01:46
一、前言 KNN 的英文叫 K-Nearest Neighbor,应该算是数据挖掘算法中最简单的一种。 先用一个例子体会下。 /*请尊重作者劳动成果,转载请标明原文链接:*/ /* https://www.cnblogs.com/jpcflyer/p/11111817.html * / 假设,我们想对电影的类型进行分类,统计了电影中打斗次数、接吻次数,当然还有其他的指标也可以被统计到,如下表所示。 我们很容易理解《战狼》《红海行动》《碟中谍 6》是动作片,《前任 3》《春娇救志明》《泰坦尼克号》是爱情片,但是有没有一种方法让机器也可以掌握这个分类的规则,当有一部新电影的时候,也可以对它的类型自动分类呢? 我们可以把打斗次数看成 X 轴,接吻次数看成 Y 轴,然后在二维的坐标轴上,对这几部电影进行标记,如下图所示。对于未知的电影 A,坐标为 (x,y),我们需要看下离电影 A 最近的都有哪些电影,这些电影中的大多数属于哪个分类,那么电影 A 就属于哪个分类。实际操作中,我们还需要确定一个 K 值,也就是我们要观察离电影 A 最近的电影有多少个。 二、KNN 的工作原理 “近朱者赤,近墨者黑”可以说是 KNN 的工作原理。整个计算过程分为三步: 1. 计算待分类物体与其他物体之间的距离; 2. 统计距离最近的 K 个邻居; 3.对于 K 个最近的邻居,它们属于哪个分类最多