message 顺序性如何保证?
问题
很多业务都需要考虑消息投递的顺序性:
单聊消息投递,保证发送方发送顺序与接收方展现顺序一致
群聊消息投递,保证所有接收方展现顺序一致
充值支付消息,保证同一个用户发起的请求在服务端执行序列一致
消息顺序性是分布式系统架构设计中非常难的问题,有什么常见优化实践呢?
折衷一:以客户端或者服务端的时序为准
不管什么情况,都需要一个标尺来衡量时序的先后顺序,可以根据业务场景,以客...
2019-01-07 11:29:47 |
Distributed
redis 分布式锁设计 redis lock
RedLock
在redis的官网上,可以很方便的查到一个分布式锁的实现:RedLock。
那就先简单说下,redis作者antirez对于分布式锁是如何设计的吧。
基于单redis节点的锁
首先,获取锁采用类似下面的命令:
SET resource_name my_random_value NX PX 30000
这条命令尝试去获取一个资源的锁,这里的锁过期时间是30000毫...
2019-01-07 11:29:47 |
Distributed
SQL 查询优化之虚拟列
虚拟列
虚拟列:虚拟列是不保存在磁盘中的,仅在获取的时候根据存储在磁盘中的列计算,组合获取。虚拟列可以创建索引,可以收集统计信息。创建虚拟列的语法是:column datatype(generated always) as (exp) virtrual,在定义虚拟列时没有指定数据类型则默认使用虚拟列表达式里面返回的值的数据类型,虚拟列的值不能是哦那个update和insert操作来更新,其...
2019-01-05 02:10:43 |
SQL
JOOQ
JOOQ
JOOQ 可以通过数据库直接生成 java 代码,通过 flent-api 进行数据库操作。
SQL builder
JOOQ 非常的灵活和强大。你可以用它来拼装 SQL 语句
// Fetch a SQL string from a jOOQ Query in order to manually execute it with another tool.
// For s...
2019-01-05 02:10:43 |
SQL
Javalite ActiveJDBC
ActiveJDBC
ActiveJDBC 可以直接通过读取表的信息,来处理数据库相关操作。
优点
java model 中不需要任何的属性,全部是动态反射的。
缺点
是否性能比较差?
其实也不是,可以在服务启动的时候,去数据库将对应的信息全部加载。
基于继承
public class Person extends Model {}
继承使得当前类拥有非常...
2019-01-05 02:10:43 |
SQL
优先级队列与堆排序
优先级队列
不同于先进先出队列,其对每一个元素指定了优先级,一般情况下,出队时,优先级越高的元素越先出队。
问题
题目
实现一个优先级队列,此队列具有enqueue(val,prior)和dequeue()两种操作,分别代表入队和出队。
其中enqueue(val,prior)第一个参数val为值,第二个参数prior为优先级(prior越大,优先级越高),优先级越高越先出队
d...
2019-01-04 07:24:22 |
Althgorim
位图法对大量整数进行排序
问题
输入:一个最多包含n个正整数的文件,每个数都小于n,其中n=10^7。如果在输入文件中有任何正数重复出现就是致命错误。没有其他数据与该正数相关联。
输出:按升序排列的输入整数的列表。
约束:最多有(大约)1MB的内存空间可用,有充足的磁盘存储空间可用。运行时间最多几分钟,运行时间为10秒就不需要进一步优化。
这是《编程珠玑》中很有意思的一个问题。今天给大家分享一下并附上自己的代...
2019-01-03 00:25:22 |
Althgorim
主键和外键
主键
概念
学生表(学号,姓名,性别,班级) 学号是一个主键
课程表(课程号,课程名,学分) 课程号是一个主键
成绩表(学号,课程号,成绩) 学号和课程号的属性组构成一个主键
成绩表中的学号不是成绩表的主键,不过是学生表的主键,成绩表的外键,同理课程号也是成绩表的外键
定义
如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键
以一个关系的外键作主...
2019-01-02 02:17:00 |
SQL