自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 关于MongoDB使用的优化总结

在画像平台人群圈选模块中,人群包的计算和存储是在CilckHouse引擎中完成的。但是基于CilckHouse在并发查询、集群压力方面的考虑,在数据输出模块中,并不是直接从CilckHouse中查询获取数据,而是在人群包数据计算完成后,通过数据同步模块将数据从CilckHouse同步到MongoDB中。MongoDB作为数据输出模块的底层数据存储和查询引擎,需要满足高效的数据写入和读取性能。同时人群包并不必保存全部的历史数据,mongoDB中只需保留最近N个版本的人群包数据即可,所以为了删除无效数据,还需要

2021-11-03 11:26:04 1387 1

原创 因文件流没有关闭而引发的报警

某天一个运行很久没有出问题的服务报警了,查看日志是如下错误,赶紧排查,搜索“java.io.IOException: error=24, Too many open files”,找到类似的这篇文章(https://blog.csdn.net/imliuqun123/article/details/103925527),通过“lsof -p Pid | wc -l” 查看了进程打开的文件总数,使用“ulimit -a”命令查看了系统的限制是多少。发现确实是超了。通过“lsof -p Pid”

2021-08-15 18:53:14 570

原创 web应用学习_SpringBoot内嵌Tomcat启动

/spring-boot-2.1.9.RELEASE.jar!/org/springframework/boot/SpringApplication.class /** * Run the Spring application, creating and refreshing a new * {@link ApplicationContext}. * @param args the application arguments (usually passed from a Java main

2021-06-01 11:00:30 575

原创 web 请求处理过程

1、/tomcat-embed-core-9.0.26.jar!/javax/servlet/http/HttpServlet.class类的public service()方法,Dispatches client requests to the protected servicemethod. There's no need to override this method。将ServletRequest/ServletResponse 转成 HttpServletRequest/HttpS...

2021-06-01 11:00:05 216 1

原创 web应用学习_Spring Boot外置Tomcat启动

Spring只是一个框架,用来简化开发。如果是web应用,则涉及到servlet、servlet容器等等,可以使用Spring MVC框架快速开发,需要将web应用部署到Tomcat中进而提供服务(当然Tomcat也是跑在JVM上的)。如果不是是web应用,肯定不涉及Tomcat和Spring MVC等web框架,但是可以有Spring框架来处理bean之间的依赖关系等等,应用应该是直接跑在JVM上的。----------------------------------------在w.

2021-05-31 21:20:44 346 1

原创 Spring Web项目

使用Spring MVC搭建了web项目(~/IdeaProjects/Beautiful1205/test-springmvc/springmvctest,有时间上传至github)后,我们来探索一下原理...一、Spring MVC 与 Spring BootSpring MVC提供了一种轻度耦合的方式来开发web应用。它是Spring的一个模块,是一个web框架。通过DispatcherServlet, ModelAndView 和 ViewResolver,开发web应用变得很容易。Sp

2021-05-16 20:15:18 606 2

原创 web应用知识点串讲

一、前言工作后一直使用springboot,但想想对框架的理解好像仅停留在了表面,内心有点不安。就把最近这段时间看的web应用/Servlet/Tomcat/Spring框架相关的知识点做一个简单的整理,尽量做到知其然也知其所以然,把一些知识点都能够串起来。部分内容摘抄自网络,详情见原址。二、web应用Web是万维网(WWW,World Wide Web)的俗称,它是一个体系结构框架。Web是由大量分布在全球范围的内容组成的,这些内容是以web页面的形式表示的。web页面又分为静态页面和动态页面

2021-05-16 18:37:56 176 3

原创 Zookeeper源码学习记录

Zookeeper源码学习记录

2021-05-16 16:54:22 117

原创 如何批量获取redis数据呢?

背景redis作为我们接口开发中的首选缓存,当从redis中每次获取一个key的value时,接口响应时间上一般是没啥问题的,但是当需要获取多个key的value时,一般需要使用mget等批量获取的方法。但是当value是以压缩格式写入到redis中的时候,还可以直接套用原来的方法吗?最近在一个接口的开发过程中遇到了这个问题,特此记录下解决方法。先复习下redis、jedis和redisTemplate之间的关系:Redis是用ANSI C写的一个基于内存的Key-Value数据库,而Jedis是R

2020-10-18 23:59:37 7101 3

原创 Spring Boot整合Redis出现乱码解决方案

一、背景使用Spring Boot整合Redis,将数据保存到redis后,登陆redis客户端,发现redis key前面多了一串乱码字符\xac\xed\x00\x05t\x00\x17(具体图片就不贴了,类似的图片网上有很多),排查发现是因为spring-data-redis中redisTemplate默认使用JDK的序列化策略JdkSerializationRedisSerializer,通过设置redisTemplate的序列化策略为StringRedisSerializer后,乱码key的问

2020-06-25 23:26:05 1222 1

原创 ClickHouse源码阅读(0001 0000) —— CK Server对SQL的处理(INSERT SQL - 2)

这篇文章主要介绍的是对于INSERT SQL,执行器interpreter调用execute()方法构造block 流的过程,对于具体的写入数据过程,在TCPHandler::processInsertQuery() 方法中,今天来具体分析下:先看下带注释的代码: void TCPHandler::processInsertQuery(const Settings &global_settings) { /** Made above the rest of the l

2020-06-21 15:07:22 473

原创 ClickHouse源码阅读(0000 1111) —— ClickHouse中的bitmap实现

项目中使用到了ClickHouse的bimtap结构,来分析下ClickHouse中bimtap的具体实现。ClickHouse中bitmap结构的类型为 AggregateFunction(groupBitmap, UInt32),对应如下源码: template<typename T> struct AggregateFunctionGroupBitmapData { RoaringBitmapWithSmallSet<T, 32>

2020-06-06 17:27:33 2184 1

原创 ClickHouse源码阅读(0000 1110) —— ClickHouse是如何读写数据的(readStringBinary和writeStringBinary方法解析)

还是先看写string的方法: writeStringBinary((DBMS_NAME " ") + client_name, *out);//将"ClickHouse client"写到out中即把字符串‘ClickHouse client’写到out中。inline void writeStringBinary(const std::string & s, WriteBuffer & buf){ //向Buffer中写入字符串 //1.

2020-05-11 23:10:11 715

原创 ClickHouse源码阅读(0000 1101) —— ClickHouse是如何读写数据的(readVarUInt和writeVarUInt方法解析)

先说写数据的方法,再说读数据的方法,知道怎么写,才知道怎么读。写数据:写一个数值型的数字:再Client端向Server端发起连接时,会写一个客户端的版本信息,客户端是怎么写的呢?源码如下: writeVarUInt(ClickHouseRevision::get(), *out); //将"54420"写到out中(最终会用\x94\a9\03表示数字8)即把ClickHouseRevision::get()的结果54420写到out中。/**举例.

2020-05-11 23:09:56 712 1

原创 ClickHouse源码阅读(0000 1100) —— TCPHandler.cpp中的in和out分析

分析一下TCPHandler.cpp中的in和out两个(私有的)成员变量, /// Streams for reading/writing from/to client connection socket. std::shared_ptr<ReadBuffer> in;//从客户端读取的数据 std::shared_ptr<WriteBuffer> out;//要写到客户端的数据在runImpl()方法中,从这里开始:

2020-05-11 22:08:18 527

原创 ClickHouse源码阅读(0000 1011) —— ClickHouse Client端如何接收Server端发送回来的数据

在这篇文章中提到:client端对于非INSERT语句,processOrdinaryQuery()方法的代码如下: /// Process the query that doesn't require transferring data blocks to the server. void processOrdinaryQuery() { ...

2020-05-04 23:55:41 1344

原创 mac OS 系统关于terminal的学习

在mac OS系统上,每次新开一个terminal窗口,都会显示Last login: Mon May 4 15:19:22 on ttys00x类似这样的提示,大概看了下tty命令,记录一下:主要参考:1)https://www.runoob.com/linux/linux-comm-tty.html2)https://cloud.tencent.com/developer/art...

2020-05-04 15:43:18 925 1

原创 ClickHouse源码阅读(0000 1010) —— CK Server对SQL的处理(INSERT SQL)

在上篇文章中提到:执行器interpreter调用execute()方法执行, 返回BlockIO (block streams), 这一步就是根据不同的SQL类型去构建block streams了。今天具体针对INSERT SQL的execute()方法来分析一下:直接看一下InterpreterInsertQuery.cpp中的execute()方法:BlockIO Interpre...

2020-05-02 23:32:45 626

原创 ClickHouse源码阅读(0000 1001) —— CK Server对SQL的处理

在上篇文章中提到:服务端*Handler接收到client端SQL后会进行处理,今天具体来分析一下处理过程。会介绍一下大概的处理流程。以TCPHandler为例:dbms/programs/server/TCPHandler.cpp文件中包含run()方法,调用runImpl()方法,包含注释的代码如下:void TCPHandler::runImpl() { setTh...

2020-05-01 22:02:25 1100

原创 ClickHouse源码阅读(0000 1000) —— PREWHERE optimization

看SQL的执行日志的时候经常会出现这样一条日志如下图,今天来结合源码分析一下:1、PREWHERE 关键字介绍PREWHERE ClauseThis clause has the same meaning as the WHERE clause. The difference is in which data is read from the table. When usin...

2020-02-09 15:40:40 1438

原创 Java中【年(year)和周年(week year)】的区别

在将日期格式化的时候,不注意的话代码中可能同时存在“yyyy-MM-dd”和“YYYY-MM-dd”两种格式,date格式为“YYYY-MM-dd”表示的是周年,date格式为“yyyy-MM-dd”表示的是年。这两种格式是的功能是完全一样的吗?先上代码测试一下:import java.text.SimpleDateFormat;import java.time.LocalDate...

2019-12-31 17:54:32 5030

原创 ClickHouse源码阅读(0000 0111) —— 使用ReplicatedMergeTree引擎时的副本选择问题--对远程副本的选择

前一篇文章已经讲到对于没有使用表函数的情况,pool->getManyChecked()这个方法是重点。对于这个方法的返回值可以看一下,TryResult的定义如下: struct TryResult { TryResult() = default; explicit TryResult(Entry entry_) ...

2019-12-25 18:13:08 1331

原创 ClickHouse源码阅读(0000 0110) —— 使用ReplicatedMergeTree引擎时的副本选择问题

在使用ReplicatedMergeTree引擎和Distributed引擎的时候,对于同一张表,服务器上存在多个副本,在查询数据的时候,是如何在这些副本之间进行选择的呢?结合源码来试着分析一下...对于一条SELECT SQL,从以下方法开始:pipeline.streams = storage->read(required_columns, query_info, contex...

2019-12-25 17:16:17 987

原创 ClickHouse源码阅读(0000 0101) —— ReplicatedMergeTree存储引擎

/** The engine that uses the merge tree (see MergeTreeData) and replicated through ZooKeeper.ReplicatedMergeTree引擎使用MergeTree存储数据,通过ZooKeeper协调保存副本数据。 * ZooKeeper is used for the following things...

2019-12-24 20:47:18 606

原创 ClickHouse源码阅读(0000 0100) —— ClickHouse是如何执行SQL的

继续上篇文章的思路来分析,先说process()方法,简化代码如下:bool process(const String &text) { const bool test_mode = config().has("testmode"); //`--multiquery, -n` – 如果指定, 允许处理用逗号分隔的多个查询, 只在非交互模...

2019-12-14 11:51:00 1448

原创 ClickHouse源码阅读(0000 0011) —— ClickHouse Client启动和终止过程分析

在Mac OS系统上,命令行终端切换到/Users/***/ClionProjects/Beautiful1205/ClickHouse/cmake-build-debug/dbms/programs目录下,执行以下命令:./clickhouse client --port=9000则通过TCP连接与Server端建立连接,Client端打印如下日志:ClickHouse源码阅...

2019-12-13 23:58:33 1124

原创 ClickHouse源码阅读(0000 0001) —— main.cpp分析

C++项目在启动时都是从main()方法开始执行的。今天来分析一下ClickHouse源码的main.cpp。先找到main()方法:int main(int argc_, char **argv_) { /// Reset new handler to default (that throws std::bad_alloc) /// It is needed becau...

2019-12-13 23:04:08 911

原创 ClickHouse源码阅读(0000 0010) —— 根据日志分析ClickHouse Server启动和终止过程

在Mac OS系统的CLion中启动ClickHouse Server,启动过程日志和终止过程日志如下:/Users/***/ClionProjects/Beautiful1205/ClickHouse/cmake-build-debug/dbms/programs/clickhouse server --config-file /Users/***/ClionProjects/Beauti...

2019-12-01 16:37:16 1888

原创 ClickHouse源码阅读(0000 0000) —— Overview of ClickHouse Architecture

注意:暂未翻译完,慢慢翻译20191212翻译了执行器部分;-----------------------------------------本文由官方文档翻译而来,英文原文详见Overview of ClickHouse ArchitectureClickHouse is a true column-oriented DBMS. Data is stored by columns...

2019-12-01 15:03:00 1420

原创 Mac下Java的native方法以及JNI调用C++语言

JNI的生成步骤——Mac版(参考资料)编写带有native声明的方法的java类,生成.java文件 使用javac命令编译所编写的java类,生成.class文件 使用javah -jni java类名生成扩展名为h的头文件,也即生成.h文件 使用C/C++(或者其他编程想语言)实现本地方法,创建.h文件的实现,也就是创建.cpp文件实现.h文件中的方法 将C/C++编写的文件生成...

2019-09-07 11:59:20 510 1

原创 联想Y500 UEFI+GPT win10安装ubuntu双系统

前期准备工作:查看电脑硬盘格式; 了解怎么进入电脑的bios模式;(一般有UEFI和Legacy两种模式,具体可以去了解一下)制作U盘启动盘:下载ubuntu安装镜像文件,使用rufus制作启动盘(之前用的软蝶通,结果失败了) 给电脑分区,过程为:计算机,右键-&gt;管理-&gt;磁盘管理-&gt;找一个大的硬盘,右键压缩卷,输入大小即可。(这个过程网上教程还比较靠谱)安装ubu...

2019-03-03 11:08:17 1360

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除