草庐IT

sort_buffer

全部标签

我不认为PG的Double Buffering是更优秀的解决方案

关于PG在Sharedbuffers上的DOUBLEBUFFERING设计,一直是争议极多的。有一些搞PG的朋友认为这是PG充分利用OSCACHE的一种特殊设计,是PG数据库设计中比较优秀的地方。还有一些朋友则认为这是一种过时的设计,与当前数据库技术的发展潮流所相违背的。前些天有几个朋友谈到这个问题,希望我写篇位置表达下我的观点。以我这些年做数据库优化的经验来看,DOUBLEBUFFERING的设计如果算是一种技术上的进步,在这一点上我一直是不太认同的。众所周知,现在几乎所有的现代数据库产品都是用AIO/DIO等方式来访问底层存储系统,只有PG目前还通过BUFFER/CACHE来读取物理文件。

我不认为PG的Double Buffering是更优秀的解决方案

关于PG在Sharedbuffers上的DOUBLEBUFFERING设计,一直是争议极多的。有一些搞PG的朋友认为这是PG充分利用OSCACHE的一种特殊设计,是PG数据库设计中比较优秀的地方。还有一些朋友则认为这是一种过时的设计,与当前数据库技术的发展潮流所相违背的。前些天有几个朋友谈到这个问题,希望我写篇位置表达下我的观点。以我这些年做数据库优化的经验来看,DOUBLEBUFFERING的设计如果算是一种技术上的进步,在这一点上我一直是不太认同的。众所周知,现在几乎所有的现代数据库产品都是用AIO/DIO等方式来访问底层存储系统,只有PG目前还通过BUFFER/CACHE来读取物理文件。

弄明白DOUBLE BUFFERING对PG数据库的运维与优化有什么意义

​昨天的案例讲了因为PG的DOUBLEBUFFERING导致的SQL执行忽快忽慢的问题,有些朋友在问是不是Oracle之外的很多数据库都是用类似的方式读取文件,这种DoubleBuffering技术是不是很落后,是不是必须加以改进。实际上,只要是使用文件系统,并且在读数据时没有采用DIO的数据库都会存在DOUBLEBUFFERING的问题,早期的Oracle也存在类似问题。上图比较清晰的说明了DOUBLEBUFFERING问题,对于写的情况,因为先写入CACHE,再由OS把CACHE写入磁盘,中间会有一些性能损失,不过对于现代的数据库来说,只有REDO/WAL是需要强一致性写入的,数据文件的写

弄明白DOUBLE BUFFERING对PG数据库的运维与优化有什么意义

​昨天的案例讲了因为PG的DOUBLEBUFFERING导致的SQL执行忽快忽慢的问题,有些朋友在问是不是Oracle之外的很多数据库都是用类似的方式读取文件,这种DoubleBuffering技术是不是很落后,是不是必须加以改进。实际上,只要是使用文件系统,并且在读数据时没有采用DIO的数据库都会存在DOUBLEBUFFERING的问题,早期的Oracle也存在类似问题。上图比较清晰的说明了DOUBLEBUFFERING问题,对于写的情况,因为先写入CACHE,再由OS把CACHE写入磁盘,中间会有一些性能损失,不过对于现代的数据库来说,只有REDO/WAL是需要强一致性写入的,数据文件的写

std::sort invalid comparator 的严格弱序问题

测试代码std::vectorarr=[1,5,2,4,3];std::sort(arr.begin(),arr.end(),[](inta,intb){returna>=b;});这个排序算法在运行时会报错:网上查了好久,都是说C++标准规定cmp函数是弱序的,然后把returna>=b改成returna>b就行了,具体为啥也没说明白,很多的官方术语解释,看的云里雾里。大致追踪了下stl的代码,发现其实这个报错就是下边这个逻辑导致的,稍微花点时间研究下,原因就写在代码里面:以上代码大概意思就是要遵循结果对称。返回true的情况,假如complex(1,2)==true,那么complex(2

std::sort invalid comparator 的严格弱序问题

测试代码std::vectorarr=[1,5,2,4,3];std::sort(arr.begin(),arr.end(),[](inta,intb){returna>=b;});这个排序算法在运行时会报错:网上查了好久,都是说C++标准规定cmp函数是弱序的,然后把returna>=b改成returna>b就行了,具体为啥也没说明白,很多的官方术语解释,看的云里雾里。大致追踪了下stl的代码,发现其实这个报错就是下边这个逻辑导致的,稍微花点时间研究下,原因就写在代码里面:以上代码大概意思就是要遵循结果对称。返回true的情况,假如complex(1,2)==true,那么complex(2

关于protocol buffers:如何直接从protobuf创建GRPC客户端而不用编译成java代码

HowtocreateGRPCclientdirectlyfromprotobufwithoutcompilingitintojavacode使用GRPC时,我们需要通过协议缓冲区编译器(protoc)或使用Gradle或Mavenprotoc构建插件从我们的.proto服务定义生成gRPC客户端和服务器接口。1Flownow:protobuffile->javacode->gRPCclient.那么,有没有办法跳过这一步?如何创建一个通用的GRPC客户端,可以直接从protobuf文件调用服务器而不编译成java代码?或者,有没有办法在运行时生成代码?1Flowexpect:protobuf

关于protocol buffers:如何直接从protobuf创建GRPC客户端而不用编译成java代码

HowtocreateGRPCclientdirectlyfromprotobufwithoutcompilingitintojavacode使用GRPC时,我们需要通过协议缓冲区编译器(protoc)或使用Gradle或Mavenprotoc构建插件从我们的.proto服务定义生成gRPC客户端和服务器接口。1Flownow:protobuffile->javacode->gRPCclient.那么,有没有办法跳过这一步?如何创建一个通用的GRPC客户端,可以直接从protobuf文件调用服务器而不编译成java代码?或者,有没有办法在运行时生成代码?1Flowexpect:protobuf

关于 Spring MVC with MongoDB:Spring MVC with MongoDB – Sorting and Limits

SpringMVCwithMongoDB-SortingandLimits在SpringMVC中对MongoDB查询结果进行排序的最佳方法是什么?我已经在XML文件中设置了所有映射,我可以在Service类中调用myrepository.findAll()就好了,它工作得很好。我如何对这些结果进行排序(例如按日期)和/或限制结果(例如按3等)。在Mongo本身中,只需执行db.mycollection.find().sort({postedAt:-1});就很容易了。或者只是抛出一个.limit(3)来获得前3个结果。在SpringMVC环境中处理此问题的最佳方法是什么?谢谢。如果你的myre

关于 Spring MVC with MongoDB:Spring MVC with MongoDB – Sorting and Limits

SpringMVCwithMongoDB-SortingandLimits在SpringMVC中对MongoDB查询结果进行排序的最佳方法是什么?我已经在XML文件中设置了所有映射,我可以在Service类中调用myrepository.findAll()就好了,它工作得很好。我如何对这些结果进行排序(例如按日期)和/或限制结果(例如按3等)。在Mongo本身中,只需执行db.mycollection.find().sort({postedAt:-1});就很容易了。或者只是抛出一个.limit(3)来获得前3个结果。在SpringMVC环境中处理此问题的最佳方法是什么?谢谢。如果你的myre