records

MySQL去重保留最大的那条记录(取最新的记录)

我与影子孤独终老i 提交于 2020-08-18 05:38:20
以用户登录日志表为例,取用户最近登录的设备 1 SET NAMES utf8mb4; 2 SET FOREIGN_KEY_CHECKS = 0 ; 3 4 -- ---------------------------- 5 -- Table structure for t_login_log 6 -- ---------------------------- 7 DROP TABLE IF EXISTS ` t_login_log ` ; 8 CREATE TABLE ` t_login_log ` ( 9 ` id ` int( 11 ) NOT NULL AUTO_INCREMENT, 10 ` user_id ` int( 11 ) NOT NULL COMMENT '用户ID' , 11 ` device_name ` varchar( 32 ) COLLATE utf8mb4_bin NOT NULL COMMENT '登录设备' , 12 ` login_time ` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '登录时间' , 13 PRIMARY KEY ( ` id ` ) 14 ) ENGINE = InnoDB AUTO_INCREMENT =

Linode 虚拟主机安装 discourse 邮件没有发送

谁说我不能喝 提交于 2020-08-17 11:11:57
discourse 在安装的时候对电子的依赖性非常强。 linode VPS 安装后 discourse 的电子邮件始终没有办法发送成功。 discourse 在安装完成后,需要对电子邮件进行校验。如果你不配置 SMTP 服务器的话,你的 discourse 是没有办法完成安装的。 很多时候如果你测试的话,你可能会使用你的私人邮件服务器进行 SMTP 测试,如果你是站长的话,你应该使用商业的电子邮件服务器。商业电子邮件服务器能够提供更好的功能,能够对发送的邮件进行跟踪,更主要的是发送量和每秒钟的发送速率能够更高,能够实现批量发送邮件。 如果你怕麻烦也怕绑定信用卡的话,你也可以使用 AWS 的 SES 邮件服务,其实功能都差不多,还更加便宜,但是 SES 对发送的电子邮件处理就不是那么好了,你不知道你发送的邮件有没有被打开。 linode VPS 在安装完成后是默认关闭 587 端口的,主要原因是可能虚拟主机服务商避免很多人申请一个非常便宜的 VPS,然后大量发送垃圾邮件。 你可以在你的账号下提交工单让 linode 帮你打开 587 端口,一般来说他们都会回复你一个下面的内容: Hello, To help combat spam on our platform, new Linode accounts have SMTP port restrictions in place on

ibatis和mybatis中的BatchExecutor

本秂侑毒 提交于 2020-08-17 04:34:17
ibatis中的的处理方法 spring集成了ibatis的批量提交的功能,我们只要调用API就可以了 首先在你的dao中需要继承org.springframework.orm.ibatis.support.SqlMapClientDaoSupport 然后在代码中调用getSqlMapClientTemplate方法, 获取SqlMapClientTemplate对象,然后做处理 public void insertInfos(List<Info> records) { if (null == records || records.size() == 0) { return; } // 执行回调 SqlMapClientTemplate sqlMapClientTemplate = iBatisDaoLS13.getSqlMapClientTemplate(); sqlMapClientTemplate.execute(new SqlMapClientCallback() { // 实现回调接口 public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException { // 开始批处理, for循环里面的sql必须一致,否则会创建新的PreparedStatement executor

mysql大表在不停机的情况下增加字段该怎么处理

≡放荡痞女 提交于 2020-08-16 16:59:40
MySQL中给一张千万甚至更大量级的表添加字段一直是比较头疼的问题,遇到此情况通常该如果处理?本文通过常见的三种场景进行案例说明。 1、 环境准备 数据库版本 : 5.7.25-28(Percona 分支) 服务器配置: 3台centos 7虚拟机,配置均为2CPU 2G内存 数据库架构: 1主2从的MHA架构(为了方便主从切换场景的演示,如开启GTID,则两节点即可),关于MHA搭建可参考此文 MySQL高可用之MHA集群部署 准备测试表: 创建一张2kw记录的表,快速创建的方法可以参考 快速创建连续数 本次对存储过程稍作修改,多添加几个字段,存储过程如下: DELIMITER $$ CREATE PROCEDURE `sp_createNum`(cnt INT ) BEGIN DECLARE i INT DEFAULT 1 ; DROP TABLE if exists tb_add_columns; CREATE TABLE if not exists tb_add_columns(id int primary key ,col1 int ,col2 varchar ( 32 )); INSERT INTO tb_add_columns(id,col1,col2) SELECT i as id ,i % 7 as col1,md5(i) as col2; WHILE i <

ssm框架实现图片上传显示并保存地址到数据库

僤鯓⒐⒋嵵緔 提交于 2020-08-16 03:44:28
本案例是通过springmvc+spring+mybatis框架以商品上传为例,实现的图片上传功能,并把图片的地址保存到数据库并在前台显示上传的图片。 本项目是使用maven搭建的项目,首先看下项目结构 相关配置自行搜索,下边直接实现上传功能 1.创建数据库 DROP TABLE IF EXISTS `product`; CREATE TABLE `product` ( `pid` int(11) NOT NULL AUTO_INCREMENT, `pimage` varchar(255) DEFAULT NULL, PRIMARY KEY (`pid`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of product -- ---------------------------- INSERT INTO `product` VALUES ('2', '6c648d82-dc29-4b92-855e-491741e092a21.jpg'); INSERT INTO `product` VALUES ('3', '80f26905-7342-492c-be6e-c3f0ad81c2aa1.jpg'); INSERT INTO

kafka多容器工厂反序列化kafkaListenerContainerFactory

断了今生、忘了曾经 提交于 2020-08-15 07:44:40
原创 业务需要,批量消费,但是又想批量直接按List<ModelDTO> 模式直接拉取数据,批量处理。 private final String topic = "queue_notify" ; @KafkaListener ( topics = topic , containerFactory = "kafkaLiveListenerContainerFactory" ) public void listen (List<PushLiveDTO> pushLiveDTOS) { Long startTime = System. currentTimeMillis () ; // 批量个推 p ushService .notifyLiveGetui (pushLiveDTOS) ; Long endTime = System. currentTimeMillis () ; } private final String topic = "queue_push" ; // containerFactory 容器工厂方法 @KafkaListener ( topics = topic , containerFactory = "kafkaListenerContainerFactory" ) public void listen (List<PushTestDTO>

MapReduce 论文阅读笔记

流过昼夜 提交于 2020-08-14 15:46:50
Abstract MapReduce : programming model 编程模型 an associated implementation for processing and generating large data sets. 用户只需要指定 Map(Map函数将 key/value 类型的 pair 生成中间结果的 pair) 和 Reduce 函数(Reduce 函数将所有具有相同中间结果的值组合起来)即可。 MapReduce 封装隐藏了分布式系统并行计算的细节: 输入数据的分割 计划将程序分配到一组计算机中 处理机器故障 管理集群内部的通信 程序(in functional style)分布式的运行在大型分布式的集群上,而且具有很好的可伸缩性 scalable。 Introduction 过去这些年,Google一直在寻找方法来实现处理大量数据(抓取到的文件,web日志等)的方法,通常数据量很大而且必须分散在数以千计的电脑上来进行运算。为了处理如何使计算相互关联,分配数据以及处理故障的问题,往往编写大量的复杂代码掩盖了他们,最初的简单计算的初衷却被忽略掉。 为了解决这种复杂性,抽象出了一个简单的计算模型放到一个库中,这个库隐藏了可能出现的问题: 并行计算 容错 数据分发 负载均衡 这个抽象受到了 Lisp 以及很多函数式编程语言中存在的原语 map 和

Spring Security 权限管理

夙愿已清 提交于 2020-08-14 13:07:15
概述 权限是大部分的后台管理系统都需要实现的功能,用户控制不同的角色能够进行的不同的操作。Spring Security的可以进行用户的角色权限控制,也可以进行用户的操作权限控制。在之前的代码实现上,我们仅仅只是实现用户的登录,在用户信息验证的时候使用UserDetailsService,但是却一直忽略了用户的权限。 一. 启动类配置 /** * 开启方法的注解安全校验。 * securedEnabled @Secured("ROLE_abc") 该注解是Spring security提供的 * jsr250Enabled @RolesAllowed("admin") 该注解是 JSR250 支持的注解形式 * prePostEnabled @PreAuthorize("hasAuthority('user:add') */ @SpringBootApplication @EnableGlobalMethodSecurity ( securedEnabled = true , jsr250Enabled = true , prePostEnabled = true ) public class SecurityApplication { public static void main ( String [ ] args ) { SpringApplication . run (

mysql创建定时执行存储过程任务

删除回忆录丶 提交于 2020-08-14 12:21:21
sql语法很多,是一门完整语言。这里仅仅实现一个功能,不做深入研究。 目标:定时更新表或者清空表。 案例:曾经做过定时清空位置信息表的任务。(然而,当时并未考虑服务器挂掉后的情况) 本次测试:每5s更新表字段+1 1.prepare 创建一个表: DROP TABLE IF EXISTS `test_sche`; CREATE TABLE `test_sche` ( `id` int(11) NOT NULL, `counts` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of test_sche -- ---------------------------- INSERT INTO `test_sche` VALUES ('1', '188');    2.创建一个存储过程 CREATE DEFINER=`root`@`localhost` PROCEDURE `add`() BEGIN #Routine body goes here... UPDATE test_sche SET counts=counts+1 WHERE id=1; END 注意,创建存储过程的时候

Ceph PG创建流程源码分析

混江龙づ霸主 提交于 2020-08-14 11:40:46
本章节主要介绍pg创建的流程,主要包括两部分,第一部分是创建pg在mon上跳转的流程。第二部分是osd端的pg创建流程。 以下源码分析以函数调用栈展开分析: ps:以下代码以L版本为准; 一、mon节点处理 1.函数调用栈1 1.void OSDMonitor::update_from_paxos() -> PGMonitor::check_osd_map() -> void PGMapUpdater::register_new_pgs() ->void PGMapUpdater::register_pg() void PGMonitor::check_osd_map(epoch_t epoch) { if (mon->is_peon()) return; // whatever. PGMapUpdater::register_new_pgs(osdmap, pg_map, &pending_inc);//a--- propose_pending();//b--- } a.PG的注册创建 b.完成推行,形成一致的PGMap void PGMapUpdater::register_new_pgs( const OSDMap &osd_map, const PGMap &pg_map, PGMap::Incremental *pending_inc) { for (ps_t ps =