联通光纤限制连接数_从数百万个光纤(而不是数千个线程)中查询数据库

联通光纤限制连接数

jOOQ是在Java中执行SQL的好方法,而Quasar光纤带来了大大提高的并发性

我们很高兴在平行世界的 Fabio Tudone的jOOQ博客上宣布另一个非常有趣的来宾帖子。

Parallel Universe开发了一个开放源代码堆栈,使开发人员可以轻松地在JVM上对极端的并发应用程序进行编码。 使用Parallel Universe堆栈,您可以构建与现代硬件协调工作的软件,而不必动fight动脑,同时保持您的编程语言和简单,熟悉的编程风格。

法比妥酮 Fabio Tudone开发和维护Quasar集成模块,这是Comsat项目的一部分。 在加入Parallel Universe团队之前,他参与了基于云的企业内容治理平台的开发工作,并领导了几年的开发工作。在整个职业生涯中,他一直在编写JVM软件。 他的兴趣包括Dev和DevOps实践,可伸缩性,并发和功能编程以及运行时平台。 他自然好奇,喜欢探索,他喜欢从人,地方和文化中收集知识和理解。 他还对意识练习感兴趣,喜欢写各种各样的东西。

Quasar作为Comsat项目的一部分,具有JDBC和jOOQ的集成,因此让我们来看看它的内部。

JDBC,jOOQ和Quasar

comsat-jdbc提供了JDBC API的光纤阻塞包装程序,因此您可以在光纤而不是常规Java线程中使用连接。

为什么要这么做? 因为光纤是轻量级线程,并且与正在运行的JVM中的线程相比 ,您可以拥有更多的光纤。 “更多”意味着我们要说的是数百万人,而不是数千人。

这意味着在等待JDBC执行时,您的系统中有更多的并行能力来并行执行其他操作,无论是并发/并行计算(例如在高度可靠的类Quasar Erlang类actor系统中 交换actor消息 )阻止I / O(例如, 服务 Web 请求 , 调用微服务 ,通过光纤NIO读取文件或访问其他启用光纤的数据源(如MongoDB ))。

如果您的数据库能忍受它,而更多的常规线程不会使您的系统崩溃(甚至),您甚至可以增加光纤JDBC池(请参阅附加点:后面的等待线 )并发送更多并发的jOOQ命令。

由于jOOQ使用JDBC连接访问数据库,因此在光纤上运行jOOQ就像引入comsat-jooq依赖项并将启用光纤的JDBC连接传递到jOOQ上下文一样简单:

import java.sql.Connection;
import static org.jooq.impl.DSL.*;// ...Connecton conn = FiberDataSource.wrap(dataSource).getConnection();
DSLContext create = DSL.using(connection);// ...

当然,您也可以将ConnectionProvider配置为从FiberDataSource获取连接。

从这一刻起,您可以使用常规的jOOQ,一切都会在光纤阻塞模式下发生,而不是在线程阻塞下发生。 而已。

不,真的, 绝对没有其他东西了:您将继续使用出色的jOOQ,仅使用效率更高的光纤而不是线程。 Quasar是一个好公民,不会强迫您使用新的API(特别是当原始API很好时,这很好)。

由于JVM 目前不支持可用于实现轻量级线程的本机绿色线程或延续 ,因此Quasar通过字节码检测实现了延续(以及它们之上的光纤)。 这可以在编译时完成,但是使用Quasar的代理通常更方便(尤其是在检测第三方库时),因此这是一个基于Dropwizard的Gradle示例项目 ,其中还包括Quasar代理设置(不要忘了Capsule ,这是一种非常出色的Java部署工具,可满足各种需求,这无疑使使用Quasar和代理变得轻而易举。 该示例未使用所有的jOOQ功能,而是属于SQL构建用例 (用于查询和CRUD),但是建议您对其进行更改以适合您的需求。 without-comsat分支包含一个线程阻止版本,因此您可以比较并查看与Comsat版本的(最小)差异。

排队等候在哪里?

您可能现在想知道:好的,但是JDBC是一个线程阻塞 API,Quasar如何将其转换为光纤 阻塞 API? 因为JDBC没有异步模式,所以Quasar在后台使用线程池,光纤在该线程池中分派JDBC操作,并且在JDBC操作完成后将其解冻并安排恢复(有关更多信息,请参阅Quasar的集成模式)信息)。

是的,这是讨厌的等待行 :等待线程池执行的JDBC命令。 尽管您并未将数据库并行性提高到超过JDBC线程池的大小,但是即使您仍在使用简单且熟悉的阻塞API,也不会损害光纤。 您仍然可以拥有数百万条纤维。

是否可以改善总体状况? 没有标准的异步Java RDBMS API,我们将无能为力。 但是,如果数据库是您的瓶颈,那么这可能根本不重要。 关于此主题,有好几篇不错的文章和讨论 ,该论据等于确定您要将等待线移到哪里。

好处:巧妙的jOOQ集成在幕后

目前,Quasar需要开发人员(或集成商)告诉它要进行检测的内容,尽管正在进行自动检测(此功能取决于Java 9之前不会发布的一些较小的JRE更改)。 如果您可以方便地更改源代码(或已编译的类),则可以使用@Suspendable注释方法,或者让它们throws SuspendExecution @Suspendable便足够了,但是库通常不是这种情况。 但是可以在META-INF/suspendablesMETA-INF/suspendable-supers中分别列出具有要检测的固定名称的方法,分别用于可以具有可挂起实现的具体方法和抽象/接口方法。

如果有很多(或涉及代码生成),则可以编写SuspendableClassifier随集成一起提供,并在Quasar的SPI中注册它以提供其他检测逻辑(请参见jOOQs )。 SuspendableClassifier的工作是在检测阶段检查有关运行时类路径中每个方法的签名信息,并确定该方法是否可挂起,是否可以挂起,是否可以实现或不确定。 (其他一些分类器稍后可能会说“可悬浮”或“可悬浮-超级”)。

总结一下

好吧……只需享受高效纤维上的出色jOOQ!

翻译自: https://www.javacodegeeks.com/2015/06/querying-your-database-from-millions-of-fibers-rather-than-thousands-of-threads.html

联通光纤限制连接数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337855.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 工程新建ivy文件_Hadoop学习之路(八)在eclispe上搭建Hadoop开发环境

一、添加插件将hadoop-eclipse-plugin-2.7.5.jar放入eclipse的plugins文件夹中二、在Windows上安装Hadoop2.7.5版本最好与Linux集群中的hadoop版本保持一致1、将hadoop-2.7.5-centos-6.7.tar.gz解压到Windows上的C盘software目录中2、配置hadoop的环境变量HADOOP_HOMEC:\softwa…

c语言中fclose函数的使用你会吗

点击上方蓝字关注我&#xff0c;了解更多咨询1、C语言fclose函数用于关闭使用fopen成功打开的文件。2、fopen函数和fclose函数总是成对出现。如果文件成功打开fopen函数&#xff0c;请使用fclose函数关闭文件。实例#include <stdio.h> #include <stdlib.h>int main…

悲观锁 引起死锁_悲观锁定时如何避免可怕的死锁-以及Java 8的一些用法!

悲观锁 引起死锁有时您根本无法避免&#xff1a;通过SQL进行悲观锁定。 实际上&#xff0c;当您要在共享的全局锁上同步多个应用程序时&#xff0c;它是一个很棒的工具。 有人可能认为这是在滥用数据库。 如果可以解决您遇到的问题&#xff0c;我们认为可以使用您拥有的工具。…

Java反序列化json内存溢出_fastJson与一起堆内存溢出'血案'

现象QA同学反映登录不上服务器排查问题1–日志级别查看log,发现玩家登录的时候抛出了一个java.lang.OutOfMemoryError大概代码是向Redis序列化一个PlayerMirror镜像数据,但是在JSON.toJSONString的时候出现了错误.比较清晰&#xff0c;即序列化的时候expandCapacity,内存不足。…

c语言中预处理器是什么

点击上方蓝字关注我&#xff0c;了解更多咨询1、C语言有预处理器&#xff0c;Java中没有这个概念&#xff0c;其实只是文本替换工具。2、C的预处理器&#xff0c;即CPP&#xff0c;将在实际编译器中完成处理&#xff0c;所有预处理命令将从#开始。实例#include <stdio.h>…

愚弄dnn_不要被泛型和向后兼容性所愚弄。 使用泛型类型

愚弄dnn最近&#xff0c;我与jOOQ的早期客户Ergon的 Sebastian Gruber进行了非常有趣的讨论&#xff0c;我们与之保持了密切联系。 与Sebastian交谈使我们的工程团队得出了一个结论&#xff0c;即我们应该完全重写jOOQ API。 现在&#xff0c;我们已经有很多用于各种用途的泛型…

php asp.net 代码量少,.NET_asp.net 反射减少代码书写量, 复制代码 代码如下:public b - phpStudy...

asp.net 反射减少代码书写量public bool Add(Liuyan refmodel){string sql "insert into liuyan(name,phone,zhiwei,gongsi,addr,country,dianyou,content,adddate)values(name,phone,zhiwei,gongsi,addr,country,dianyou,content,adddate)";OleDbParameter[] param…

c语言strcat_s函数如何使用

点击上方蓝字关注我&#xff0c;了解更多咨询1、strcat_s函数将strSource指向的字符串添加到其它字符串结尾。因此需要确保strDestination有足够的内存空间来容纳strSource和strDestination两个字符串&#xff0c;否则会导致溢出错误。2、strDestination末端的\0将被覆盖。strS…

502无法解析服务器标头_编写下载服务器。 第二部分:标头:Last-Modified,ETag和If-None-Match...

502无法解析服务器标头客户端缓存是万维网的基础之一。 服务器应通知客户端资源的有效性&#xff0c;客户端应尽可能快地对其进行缓存。 如我们所见&#xff0c;如果不缓存Web&#xff0c;它将非常缓慢。 只需在任何网站上Ctrl F5并将其与普通F5进行比较-后者就会更快&#xf…

c语言strcat_s函数的原理

点击上方蓝字关注我&#xff0c;了解更多咨询1、dst 内存空间大小目标字符串长度原始字符串场地‘\0’。2、使用sizeof函数获取内存空间大小&#xff0c;strlen函数获取字符串长度。即获取内存空间大小和查字符串长度。实例#include "stdafx.h" #include<stdlib.h…

java开发用怎么软件开发_Java 9中的5个功能将改变您开发软件的方式(还有2个不会)...

java开发用怎么软件开发有望在Java 9中发布的最令人兴奋的功能是什么&#xff1f; 近期不要对Java 9相对沉默而分心。JDK提交者正在努力准备下一个版本&#xff0c;预计在2015年12月才完成功能的下一个版本。此后&#xff0c;它将通过严格的测试和错误修复了将其准备于一般可用…

php redis并发读写,PHP使用Redis实现防止大并发下二次写入的方法

本文实例讲述了PHP使用Redis实现防止大并发下二次写入的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;PHP调用redis进行读写操作&#xff0c;大并发下会出现&#xff1a;读取key1&#xff0c;没有内容则写入内容&#xff0c;但是大并发下会出现同时多个php进程写…

理解C语言指针概念只需几分钟

点击上方蓝字关注我&#xff0c;了解更多咨询当我们声明一个变量或常量时&#xff0c;计算机系统会为这个变量或常量分配存储单元&#xff0c;变量的数据存储到被分配的存储单元内&#xff0c;对变量的赋值和取值操作都是针对存储单元的操作。C编译器是如何通过变量找到与其对应…

php做一个网页的源代码,用HTML5做一个个人网站此文仅展示个人主页界面。内附源代码下载地址...

下载说明&#xff1a; 1.再好的作品都不如将来要做的作品。在每一次的设计当中都能有所收获&#xff0c;才是设计师在web开发中最得益的。 2.本站所有作品均是杨青个人设计。如果发现模板有错&#xff0c;请尽情谅解。 3.如果遇到什么问htmlcss编写的个人主页&#xff0c;适合初…

jax-rs jax-ws_JAX-RS 2.x与Spring MVC:返回对象列表的XML表示

jax-rs jax-wsJSON是所有REST * API的王者&#xff0c;但是您仍然可能需要公开多种表示形式&#xff0c;包括XML。 使用JAX-RS和Spring MVC都非常简单。 实际上&#xff0c;唯一要做的就是用JAXB注释对从API调用返回的POJO进行注释。 但是在我看来&#xff0c;序列化对象列表时…

C语言中经典的程序设计结构:顺序、条件、循环

点击上方蓝字关注我&#xff0c;了解更多咨询无论使用何种编程语言&#xff0c;都含有程序设计的三大经典结构。即&#xff1a;顺序结构、条件结构和循环结构&#xff0c;C语言也是如此。综述顺序结构&#xff0c;就是一条大路走到底&#xff0c;没有岔路口&#xff0c;一步步从…

php protected const,关于const:PHP类常量 – 公共,私有还是受保护?

假设常量属性是自动公开的&#xff0c;对吗&#xff1f;有没有办法让它们成为私有的或受保护的&#xff1f;事先谢谢。隐藏它们的原因是什么&#xff1f;即使它们是公开的——它们是只读的。常量应该是公共的&#xff0c;因为它们描述的是关于类的不可变事实&#xff0c;而不是…

7-8垃圾箱分布_您认为有关垃圾收集的7件事-完全错了

7-8垃圾箱分布关于Java Garbage Collection的最大误解是什么&#xff1f;它的真实情况如何&#xff1f; 小时候&#xff0c;我的父母曾经告诉我&#xff0c;如果我学习不好&#xff0c;我将成为垃圾收集者。 他们几乎不知道&#xff0c;垃圾回收实际上是很棒的。 也许这就是为…

c语言中abort函数的使用

点击上方蓝字关注我&#xff0c;了解更多咨询1、abort函数的作用是异常终止一个进程&#xff0c;意味着abort后面的代码将不再执行。2、当调用abort函数时&#xff0c;会导致程序异常终止&#xff0c;而不会进行一些常规的清除工作。实例#include <stdio.h> #include <…

php 异常值检测,PHP中的错误处理、异常处理机制分析

例&#xff1a;$a fopen(test.txt,r);//这里并没有对文件进行判断就打开了&#xff0c;如果文件不存在就会报错?>那么正确的写法应该如下&#xff1a;if(file_exists(test.txt)){$ffopen(test.txt,r);//使用完后关闭fclose($f);}?>一、PHP错误处理的三种方式A、简单的…