持久化

消息队列及常见消息队列介绍

孤者浪人 提交于 2019-11-27 02:50:48
消息队列及常见消息队列介绍 一、消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以简单地描述为: 当不需要立即获得结果,但是并发量又需要进行控制的时候,差不多就是需要使用消息队列的时候。 消息队列主要解决了应用耦合、异步处理、流量削锋等问题。 当前使用较多的消息队列有RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq等,而部分数据库如Redis、Mysql以及phxsql也可实现消息队列的功能。 二、消息队列使用场景 消息队列在实际应用中包括如下四个场景: 应用耦合:多应用间通过消息队列对同一消息进行处理,避免调用接口失败导致整个过程失败; 异步处理:多应用对消息队列中同一消息进行处理,应用间并发处理消息,相比串行处理,减少处理时间; 限流削峰:广泛应用于秒杀或抢购活动中,避免流量过大导致应用系统挂掉的情况; 消息驱动的系统:系统分为消息队列、消息生产者、消息消费者,生产者负责产生消息,消费者(可能有多个)负责对消息进行处理; 下面详细介绍上述四个场景以及消息队列如何在上述四个场景中使用: 2.1 异步处理 具体场景:用户为了使用某个应用,进行注册,系统需要发送注册邮件并验证短信。对这两个操作的处理方式有两种:串行及并行。 (1)串行方式:新注册信息生成后,先发送注册邮件

JPA

梦想的初衷 提交于 2019-11-26 22:48:51
JPA 是干嘛的? JPA(Java Persistence API,Java 持久化 API),是一组 ORM(Object Relational Mapping,对象关系映射)规范。所谓持久化,包含三层意思: API 本身,定义在 javax.persistence 包下; JPQL(Java Persistence Query Language,Java 持久化查询语言); 对象与关联表之间的元数据。 实现 项目 开发公司 数据库支持 备注 Hibernate RedHat SQL JPA 制定的参考。 Spring Data JPA Pivotal SQL 支持 RESTful API 查询,支持 CRUD EclipseLink Eclipse Foundation SQL 及NoSQL 基于 TopLink OpenJPA Apache SQL 支持缓存。 * 2001年,澳大利亚墨尔本一位名为Gavin King的27岁的程序员,上街买了一本SQL编程的书,他厌倦了实体bean,认为自己可以开发出一个匹配对象关系映射理论,并且真正好用的Java持久化层框架,因此他需要先学习一下SQL。这一年的11月,Hibernate的第一个版本发布了。 * Pivotal 和 VMware 都是 EMC 的子公司,2015 年 Dell 以 670 亿美元收购 EMC。 *

进化版数据结构(可持久化)

牧云@^-^@ 提交于 2019-11-26 20:34:58
·线段树 主席树和可持久化线段树有什么区别? 主席树(可持久化线段树) 可持久化线段树(Persistent data structure)最主要的功能就是可以查询历史版本。那么presistent≈president(主席),得名主席树。 给你个问题: 给你一段数列,要求查询一段区间的第k小数。 \((n<=10^5)\) 要怎么做?【面面相觑】 很容易想到两种方法: ①建一棵线段树,然后再每个表示区间的节点上都建一棵 权值线段树 !直接查询即可。 ②建n棵线段树,第i棵线段树表示1~i里面所有的数构成的 权值线段树 !那么查询区间的时候就直接像使用前缀和一样,每个节点表示的权值区间在这个查询的区间中拥有数的个数就是:当前节点个数减去区间左端点建的树中对应的点的数量。 例如: 我们查询区间[2~4]的第k小,我们可以很显然的地得出:每个节点的值其实就是在第4棵线段树上这个节点的值减去在第一棵线段树上这个节点的值。然后按照权值线段树的查询规律下去找就好了。 很明显这个算法的时间空间复杂度都是 \(O(n^2\) \(log\) \(n)\) 的。 主席树的主体是线段树,准确的说,是很多棵线段树。那么如何既能建出那么多棵线段树,同时不会MLE、TLE. 很显然我们会发现,修改前缀和的时候只有可能加入一个数,而受到这个数影响的只有可能有一条链,那么其他我们新开的点就都是废的了

Docker的持久化存储和数据共享

拥有回忆 提交于 2019-11-26 19:47:31
volume存储 查看volume列表 sudo docker volume ls 查看详情 sudo docker volume inspect 6ce358b6561136550039f9ec640b1aa0c89dfd05e5ea1c2ec4e2f8a7e37ca011 删除volume sudo docker volume rm 6ce358b6561136550039f9ec640b1aa0c89dfd05e5ea1c2ec4e2f8a7e37ca011 创建服务并指定volume名称和路径 -v mysql:/var/lib/mysql sudo docker run -v mysql:/var/lib/mysql -d --name mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true mys ql 这种模式下,数据会保存到指定位置,即时删除了容器,数据也会保留,下次创建指定此路径的话,数据会恢复 Bind Mouting sudo docker run -v $(pwd):/skeleton -d --name flask fanxl12/flask-skeleton 把本地的skeleton映射到容器的skeleton目录,这个时候两边目录的文件会保持同步 来源: CSDN 作者: fanxl12 链接: https://blog

【转载】关于RabbitMQ的消息持久性

此生再无相见时 提交于 2019-11-26 19:20:02
在消息队列 RabbitMQ 入门介绍里,描述了 RabbitMQ 的持久性设置。在设置持久化后,消息保存在磁盘上,即使 RabbitMQ 重启或服务器重启,消息都不会丢失。 RabbitMQ 支持 消息的持久化 ,也就是数据写在磁盘上,为了数据安全考虑,我想大多数用户都会选择持久化。消息队列持久化包括3个部分: (1)exchange 持久化,在声明时指定 durable => 1 (2)queue 持久化,在声明时指定 durable => 1 (3)消息持久化,在投递时指定 delivery_mode => 2(1 是非持久化) 如果 exchange 和 queue 都是持久化的,那么它们之间的 binding 也是持久化的。如果exchange 和 queue 两者之间有一个持久化,一个非持久化,就不允许建立绑定(这句话说的有问题,实际情况中经常出现非持久化的 queue 绑定到持久化 exchange 上的情况。个人觉得其意思应该是:当两者并非都是持久化时,其对应的 binding 就无法得到恢复)。 但是,即使设置了持久化,也不能百分百保证消息不会丢失。有很小的概率在 RabbitMQ 接受到消息后,还没来得及写到磁盘,就发生重启了。另外,RabbitMQ 也不会对每一个消息执行 fsync(2),消息可能仅仅写入到缓存,还没来得及 flush 到硬件存储。因此

模板 - 可持久化无旋Treap

让人想犯罪 __ 提交于 2019-11-26 18:47:24
空间消耗非常玄学,有多大开多大就完事了。 四个函数式查询,然后Merge的时候拷贝对应的xy子树,Split的时候拷贝p树。 #include<bits/stdc++.h> using namespace std; typedef long long ll; #define ls(p) ch[p][0] #define rs(p) ch[p][1] const int MAXN = 30000000 + 5; int val[MAXN], ch[MAXN][2], rnd[MAXN], siz[MAXN], tot, root[MAXN]; void Init() { tot = 0; memset(root,0,sizeof(root)); } int NewNode(int v) { ++tot; ch[tot][0] = ch[tot][1] = 0; val[tot] = v, rnd[tot] = rand(); siz[tot] = 1; return tot; } int CopyNode(int p) { ++tot; ch[tot][0] = ch[p][0]; ch[tot][1] = ch[p][1]; val[tot] = val[p]; rnd[tot] = rnd[p]; siz[tot] = siz[p]; return tot; } void

BZOJ 5338: [TJOI2018]xor 可持久化trie+dfs序

拟墨画扇 提交于 2019-11-26 13:55:46
强行把序列问题放树上,好无聊啊~ code: #include <bits/stdc++.h> #define N 200005 #define setIO(s) freopen(s".in","r",stdin) using namespace std; int tot,edges,tim; int cnt[N*33],ch[N*33][2],tree[N],seq[N],val[N],ba[N]; int fa[N],son[N],size[N],top[N],dep[N],hd[N],to[N<<1],nex[N<<1],dfn[N],ed[N]; inline void add(int u,int v) { nex[++edges]=hd[u],hd[u]=edges,to[edges]=v; } void insert(int pre,int &x,int v) { int now=x=++tot; for(int i=30;i>=0;--i) { int o=((v>>i)&1); ch[now][o^1]=ch[pre][o^1]; ch[now][o]=++tot; pre=ch[pre][o]; now=tot; cnt[now]=cnt[pre]+1; } } void dfs1(int u,int ff) { fa[u]=ff,dep[u]=dep[ff]+1

友链

扶醉桌前 提交于 2019-11-26 11:06:19
同届 chdy startaidou Faullest blng melody AK-ls Tyouchie millope yycdeboke gcfer BIGBIGPPT 神犇 zkw byvoid hzwer PoPoQQQ matrix67 yyb Tangenter ⚡cdecl⚡ 学长 Cydiater chty 137shoebills xorex qywyt my_snowing strangedddf UnicornXi left_right Cyxhsa rain under sea mdb jlfeng toughyt 常用网站 魔方小站 OIer博客 马同学高等数学 懒得画图论的同学有福啦 在线手写公式识别 NOIp dqcsm1964 宣传视频 2018年山东科技大学ACM编程竞赛协会纳新宣传视频 2016年成都七中OI队宣传视频 数论 数论知识总结——史诗大作(这是一个flag) OI数学知识 感受一下无穷的公式 解析几何入门 Dp 状压DP详解(位运算) 背包问题 DP 动态规划初步——各种子序列问题 图论 C++迪杰斯特拉算法求最短路径 图的存储结构之邻接表(详解) 图论中的割点,割边,圈与块 Tarjan 浅析强连通分量(Tarjan和kosaraju) Tarjan算法:求解图的割点与桥(割边) 双连通分量 tarjan求强连通分量+缩点+割点

BZOJ 3261: 最大异或和 可持久化trie

百般思念 提交于 2019-11-26 08:29:18
模板题,刷点数据结构 ~ code: #include <bits/stdc++.h> #define N 600009 #define setIO(s) freopen(s".in","r",stdin) using namespace std; int rt[N],sum[N],tot; struct node { int ch[2],cnt; }t[N*28]; void insert(int a,int b,int len,int num) { if(len<0) return; int o=(num>>len)&1; t[b].ch[o^1]=t[a].ch[o^1]; t[b].ch[o]=++tot; t[t[b].ch[o]].cnt=t[t[a].ch[o]].cnt+1; insert(t[a].ch[o],t[b].ch[o],len-1,num); } int query(int l,int r,int len,int x) { if(len<0) return 0; int o=(x>>len)&1; if(t[t[r].ch[o^1]].cnt>t[t[l].ch[o^1]].cnt) { return (1<<len)+query(t[l].ch[o^1],t[r].ch[o^1],len-1,x); } else { return query(t[l

BZOJ 3261: 最大异或和 可持久化trie

守給你的承諾、 提交于 2019-11-26 08:17:13
模板题,刷点数据结构 ~ code: #include <bits/stdc++.h> #define N 600009 #define setIO(s) freopen(s".in","r",stdin) using namespace std; int rt[N],sum[N],tot; struct node { int ch[2],cnt; }t[N*28]; void insert(int a,int b,int len,int num) { if(len<0) return; int o=(num>>len)&1; t[b].ch[o^1]=t[a].ch[o^1]; t[b].ch[o]=++tot; t[t[b].ch[o]].cnt=t[t[a].ch[o]].cnt+1; insert(t[a].ch[o],t[b].ch[o],len-1,num); } int query(int l,int r,int len,int x) { if(len<0) return 0; int o=(x>>len)&1; if(t[t[r].ch[o^1]].cnt>t[t[l].ch[o^1]].cnt) { return (1<<len)+query(t[l].ch[o^1],t[r].ch[o^1],len-1,x); } else { return query(t[l