Druid

第6章 使用springboot整合netty搭建后台

无人久伴 提交于 2020-05-02 05:08:16
我们不会去使用自增长的id,在现阶段的互联网开发过程中,自增长的id是已经不适用了。在未来随着系统版本的迭代,用户数量的递增,肯定会做分库分表,去做一些相应的切分。在这个时候我们就需要有一个唯一的id。项目里面会有一个唯一id的插件去使用。所有的主键id都会使用一个字符串varchar。小头像是预览过程中会使用到的。聊天页面使用的是小头像。qrcode是扫码的。cid是client id,它是针对我们每一台手机设备,每一台手机设备都会有一个唯一的cid,这个cid可以通过plus(设备的H5+)相应的API去获取,获取之后cid会用于做消息的推送。 users是用户表,还有一个用户请求表friends_request。 my_friends表。用户和朋友之间会有一个关联关系。通过好友的时候,my_friends表是插入两条记录,因为我的朋友和我自己是可以有一个逆向的。 聊天记录表chat_msg。任何的聊天记录在服务端都会保存的。sign_flag是签收的状态。我发送消息给我的朋友,我的朋友收到消息之后他没有去读,这个时候他的状态其实是未读。如果说他的用户接收之后,他可以自动地再发送一条签收的状态到我们的服务端,就可以证明我们当前这条消息是签收了。这个我们在netty里面我们会去做,我们会做签收的状态的更改的相应的代码实现。 一个真正的聊天软件,一个IM软件的话

MySQL读写分离(一)——sharding-jdbc

最后都变了- 提交于 2020-05-02 04:39:42
sharding-sphere是强大的读写分离、分表分库中间件,sharding-jdbc是sharding-sphere的核心模块。 官方网站 springboot项目中集成sharding-jdbc也非常简单。 首先,引入sharding-jdbc和druid的jar包: <!-- for spring boot --> <dependency> <groupId>io.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId> <version>${sharding-sphere.version}</version> </dependency> <!-- for spring namespace --> <dependency> <groupId>io.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-namespace</artifactId> <version>${sharding-sphere.version}</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid<

Spring boot后台搭建一使用MyBatis集成Mapper和PageHelper

二次信任 提交于 2020-05-01 22:03:23
目标:   使用 Spring boot+MyBatis+mysql 集成 Mapper 和 PageHelper,实现基本的增删改查 先建一个基本的 Spring Boot 项目开启 Spring Boot 参考 使用的 spring boot 版本为 2.1.6.RELEASE 1.集成MyBatis   引入 mybatis-spring-boot-starter 和数据库连接驱动   修改pom.xml < dependency > < groupId > org.mybatis.spring.boot </ groupId > < artifactId > mybatis-spring-boot-starter </ artifactId > < version > 2.0.1 </ version > </ dependency > < dependency > < groupId > mysql </ groupId > < artifactId > mysql-connector-java </ artifactId > < scope > runtime </ scope > </ dependency > 2.Druid数据源 Druid是一个关系型数据库连接池 阿里巴巴数据库事业部出品,为监控而生的数据库连接池。 https://github.com

Netflix如何使用Druid进行业务质量实时分析

不问归期 提交于 2020-05-01 16:20:21
一 、Durid介绍 Apache Druid是一个高性能的实时分析数据库。它是为快速查询和摄取的工作流而设计的。Druid的优势在于即时数据可见性,即时查询,运营分析和处理高并发方面。 Druid不是关系数据库,需要的是数据源,而不是表。与关系数据库相同的是,这些是表示为列的数据的逻辑分组。与关系数据库不同的是没有连接的概念。因此,Netflix需要确保每个数据源中都包含Netflix要过滤或分组依据的任何列。数据源中主要有三类列-时间,维度和指标。 Druid的一切都取决于时间。每个数据源都有一个timestamp列,它是主要的分区机制。维度是可用于过滤,查询或分组依据的值。指标是可以汇总的值。 通过消除执行联接的能力,并假设数据由时间戳作为键,Druid可以对存储,分配和查询数据的方式进行一些优化,从而使Netflix能够将数据源扩展到数万亿行,并且仍然可以实现查询响应时间在十毫秒内。 为了达到这种级别的可伸缩性,Druid将存储的数据分为多个时间块。时间块的持续时间是可配置的。可以根据您的数据和用例选择适当的持续时间。 二 Netfilx遇到的问题 Netflix使用来自回放设备的实时日志作为事件源,Netflix可以得出测量值,以了解和量化用户设备如何无缝地处理浏览和回放。 一旦有了这些度量,就将它们输入数据库。每项措施均标有关于所用设备种类的匿名详细信息,例如

爱了!分享一个基于SpringBoot的API、RESTfulAPI项目种子(骨架)

不打扰是莪最后的温柔 提交于 2020-05-01 07:52:46
前言 最近使用Spring Boot 配合 MyBatis 、通用Mapper插件、PageHelper分页插件 连做了几个中小型API项目,做下来觉得这套框架、工具搭配起来开发这种项目确实非常舒服,团队的反响也不错。在项目搭建和开发的过程中也总结了一些小经验,与大家分享一下。 在开发一个API项目之前,搭建项目、引入依赖、配置框架这些基础活自然不用多说,通常为了加快项目的开发进度(早点回家)还需要封装一些常用的类和工具,比如统一的响应结果封装、统一的异常处理、接口签名认证、基础的增删改差方法封装、基础代码生成工具等等,有了这些项目才能开工。 然而,下次再做类似的项目上述那些步骤可能还要搞一遍,虽然通常是拿过来改改,但是还是比较浪费时间。所以,可以利用面向对象抽象、封装的思想,抽取这类项目的共同之处封装成了一个种子项目(估计大部分公司都会有很多类似的种子项目),这样的话下次再开发类似的项目直接在该种子项目上迭代就可以了,减少无意义的重复工作。 特征&提供 最佳实践的项目结构、配置文件、精简的POM 注:使用代码生成器生成代码后会创建model、dao、service、web等包。 统一响应结果封装及生成工具 /** * 统一API响应结果封装 */ public class Result { private int code; private String message;

Spring事务监控(分布式事务1)

∥☆過路亽.° 提交于 2020-04-30 03:22:42
先写一个最最简单的插入例子来探讨Spring事务监控. model @Data public class User implements Serializable { private long id; private String name; private int age; } dao(此处数据库有一个user表,3个字段,id自增) @Mapper public interface UserDao { @Options(useGeneratedKeys = true, keyProperty = "id") @Insert("insert into user (name,age) values (#{name},#{age})") void insert(User user); } service public interface UserService { public void insert(User user); } @Transactional @Service public class UserServiceImpl implements UserService { @Autowired private ApplicationEventPublisher publisher; @Autowired private UserDao userDao; @Override

springboot(12)Redis作为SpringBoot项目数据缓存

落花浮王杯 提交于 2020-04-28 23:21:47
简介:     在项目中设计数据访问的时候往往都是采用直接访问数据库,采用数据库连接池来实现,但是如果我们的项目访问量过大或者访问过于频繁,将会对我们的数据库带来很大的压力。为了解决这个问题从而 redis 数据库脱颖而出, redis 数据库出现时是以非关系数据库的光环展示在广大程序猿的面前的,后来 redis 的迭代版本支持了缓存数据、登录session状态(分布式session共享)等。所以又被作为内存缓存的形式应用到大型企业级项目中。 本文目标    实现SpringBoot项目中整合非关系数据库Redis作为内存缓存框架,并测试数据读取源。 Redis的安装:    官网的 redis 仅支持Linux服务器的安装版本,由于开发人员都是在windows上工作,所以GitHub上的牛人基于linux平台下的Redis实现了windows版本。   下载Windows版本Redis:   我们直接访问github网址: github.com/MSOpenTech/redis/releases ,下载最新的windows X64版本的压缩包。 开启Redis:   解压完成后我们来开启Redis数据库,Redis数据库的默认端口是6379,如果已经被其他应用程序占用,请自行修改redis.windows.conf配置文件。 一、创建项目:    项目依赖pom.xml

重大更新!Druid 0.18.0 发布—Join登场,支持Java11

懵懂的女人 提交于 2020-04-28 20:42:06
Apache Druid本质就是一个分布式支持实时数据分析的数据存储系统。 能够快速的实现查询与数据分析,高可用,高扩展能力。 距离上一次更新刚过了二十多天,距离0.17版本刚过了三个多月,Druid再次迎来重大更新,Druid也越来越强大了。 Apache Druid 0.18.0 本次更新了 42位贡献者的200多个新功能,性能增强,BUG修复以及文档改进。 新功能 Join支持 Join是数据分析中的关键操作。在0.18.0之前,Druid支持一些与Join有关的功能,例如SQL中的Lookups或半联接。但是,这些功能的用例非常有限,对于其他联接用例,用户在摄取数据时必须对数据源进行规范化,而不是在查询时将其加入,这可能导致数据量激增和摄取时间延长。 Druid 0.18.0有史以来第一次支持真正的Join,Druid 目前支持INNER,LEFT和CROSS的join。对于原生查询, join 作为新的数据源被引入,以表示两个数据源的Join。 当前,仅允许 left-deep join。这意味着左侧数据源仅允许一个 table 或另一个 join 数据源。对于右侧的数据源, lookup , inline ,或者 query 数据源是允许的。 Druid SQL也支持Join了!其实本质上是SQL JOIN查询被转换为一个或几个包含原生查询。 Join会影响查询的性能

分布式 | DBLE 之 SQL 解析

老子叫甜甜 提交于 2020-04-28 19:54:00
作者:路路 热爱技术、乐于分享的技术人,目前主要从事数据库相关技术的研究。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 数据库中间件与数据库有什么区别? 个人认为除了没做数据存储,其他的功能数据库中间件几乎一样不少,比如 SQL 解析、结果集处理、协议实现等。 SQL 解析的定义 今天我们主要来谈谈 SQL 解析,SQL 的全称为 Structured Query Language,即结构化查询语言,既然定义为语言,那其实它和任何其他语言都是平等的。所以对 SQL 的解析完全等同于对任何一门语言的解析,对编程语言的解析这就涉及到编译原理相关知识了。 想要解析一门语言,通常需要具备以下工具: 词法分析器(Lexer):负责解析基本的词法,也就是将字符序列转换为单词(Token)序列的过程。 语法分析器(Parser):将词法分析器解析出的单词(Token)序列,进一步构建成有语义的数据结构,比如抽象语法树。 访问器(Visitor):能够对语法分析器生成的抽象语法树进行遍历,获取需要的信息。 上面的定义可能大家看完还有点懵懂,这里我通过一个实际的例子来让大家有个更具体的认识。 案例解析 原始 SQL 如下: SELECT id, name FROM test WHERE ID > 2 LIMIT 2; 下面我们来解析这个 SQL

Optimizing Druid with Roaring bitmaps

♀尐吖头ヾ 提交于 2020-04-28 19:41:56
这篇主要是说,如何利用compressed bitmap来提升查询性能 虽然之前有很多bitmap的压缩方案,但是,新提出的Roaring bitmap会更加高效 参考,Better bitmap performance with Roaring bitmaps BitMap,为了有效和compact的表示integer 只能表示integer,因为下标只能是integer 为何是compact? int是32bit,而32bit的bitmap是可以表示32个int的 很简单,bitmap有个问题,如果需要表示的integer很稀疏的时候,会有很多空间浪费 比如,我只需要表示7和37,那我需要一个64bit的bitmap,把第7,37bit设置为1 这样就没有compact,和直接用integer空间占用是一样的 所以自然的想法就是要根据integer的稀疏程度来选择是否使用bitmap 并且这个全局太粗了,所以要分段,不同的分段用不同的策略, 这个就是Roaring Bitmap的思路, 对于integer,32bit,分为high-16,和low-16 high-16用于分段,形成2的16次方的bucket low-16如何存储,就取决于bucket中要存储的数据数量, 如果大于4096,就用bitmap,称为bitmapContainer 小于4096,就直接存value