Distributed ID-05-系统时钟,高并发下的时间优化
高并发下的时间戳优化
/**
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the L...
2018-09-05 00:53:10 |
Distributed
Distributed ID-04-SnowFlake
概述
分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。
有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。
而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cassandra,因为Cassand...
2018-09-05 00:53:10 |
Distributed
Distributed ID-03-Random
实现方式
package com.github.houbb.heaven.util.id.impl;
import com.github.houbb.heaven.annotation.ThreadSafe;
import com.github.houbb.heaven.util.id.Id;
import com.github.houbb.heaven.util.util.DateUt...
2018-09-05 00:53:10 |
Distributed
Distributed ID-02-UUID
UUID
基本实现
@Override
public String genId() {
return UUID.randomUUID().toString()
.replaceAll(PunctuationConst.MIDDLE_LINE, PunctuationConst.EMPTY);
}
测试代码
System.out.println(new...
2018-09-05 00:53:10 |
Distributed
Distributed ID-01-Overview
分布式 ID 生成的需求
不依赖数据库。
详细理解原理
(1)写文件。提前取1000个,然后将下一个值写入文件。
(2)预取+时间戳+线程好+机器码
时间时钟怎么保持一致?
id 递增的线程安全,持久化。
基础知识
网卡 线程 并发安全 持久化 (如果递增)
位运算,进制转换。
常见参考实现
UUID
GUID
timestampe+randomNum
snowf...
2018-09-05 00:53:10 |
Distributed
Database Sharding-03-最佳实践
业务背景
移动互联网时代,海量的用户每天产生海量的数量,比如:
用户表
订单表
交易流水表
以支付宝用户为例,8亿;微信用户更是10亿。订单表更夸张,比如美团外卖,每天都是几千万的订单。淘宝的历史订单总量应该百亿,甚至千亿级别,这些海量数据远不是一张表能Hold住的。事实上MySQL单表可以存储10亿级数据,只是这时候性能比较差,业界公认MySQL单表容量在1KW以下是最佳状态,因...
2018-09-04 08:26:49 |
Database
Database Sharding in action
单 key 业务
用户中心
用户中心是一个非常常见的业务,主要提供用户注册、登录、信息查询与修改的服务,其核心元数据为:
User(uid, login_name, passwd, sex, age, nickname, …)
其中:
uid 为用户ID,主键
login_name, passwd, sex, age, nickname 等用户属性
数据库设计上,一般来说在业务...
2018-09-04 08:26:49 |
Database
Database Sharding
分表分库
概念
常见分表分库方式
按照功能分库
按照功能进行分库。常见的分成 6 大库:
1 用户类库:用于保存了用户的相关信息。
2 业务类库:用于保存主要业务的信息。比如主要业务是笑话,用这个库保存笑话业务。
3 内存类库:主要用Mysql的内存引擎。前台的数据从内存库中查找,速度快。
4 图片类库:主...
2018-09-04 08:24:49 |
Database