你好
我们将开始一个 CRUD 项目。
我有一些使用 groovy 和的经验
我认为这是正确的工具。
我关心的是性能。
与 java 解决方案相比,groovy 有多好。
估计我们最多可以有100个
同时用户。我们将使用一个
MySql DB 和一个 tomcat 服务器。
有什么意见或建议吗?
谢谢
最佳答案
我最近在一个关于 Groovy 性能的答案上收集了五张反对票 (!);但是,我认为确实需要客观事实。就我个人而言,我认为使用 Groovy 和 Grails 工作既高效又有趣;然而,有一个性能问题需要解决。
网上有很多基准比较,包括this one .你永远不能相信单一的基准(引用的基准甚至不接近科学),但你会明白的。
Groovy 强烈依赖于运行时元编程。 Groovy 中的每个对象(好吧,除了 Groovy 脚本)都从 GroovyObject 扩展与其 invokeMethod(..)方法,例如。每次在 Groovy 类中调用方法时,该方法都不会像在 Java 中那样直接调用,而是通过调用前面提到的 invokeMethod(..) 来调用。 (它做了一大堆反射和查找)。
此外,每个 GroovyObject有一个关联的 MetaClass .方法调用等概念是类似的。
与 Java 相比,还有其他因素会降低 Groovy 的性能,包括原始数据类型的装箱和(可选的)弱类型,但上述运行时元编程的概念至关重要。您甚至无法想到带有 Groovy 的 JIT 编译器,它将 Java 字节码编译为 native 代码以加快执行速度。
为了解决这些问题,Groovy++项目。您只需使用 @Typed 注释您的 Groovy 类,它们将被静态编译为(真正的)Java 字节码。然而不幸的是,我发现 Groovy++ 还不是很成熟,并且没有很好地与主要的 Groovy 产品线和 IDE 集成。 Groovy++ 也与基本的 Groovy 编程范式相矛盾。此外,Groovy++' @Typed注释不能递归地工作,也就是说,不会影响像 GORM 或 Grails Controller 基础结构这样的底层库。
我猜您也在评估是否使用 Grails 项目。
当查看 Grails 的 GORM 时,该框架大量使用运行时元编程,直接使用 Hibernate,应该会表现得更好。
在 Controller 或(尤其是)服务级别,可以将大量计算外部化为 Java 类。然而,在典型的 CRUD 应用中,GORMs 的比例更高。
Grails 中的潜在性能通常通过在 database 处缓存层来解决。级别或避免调用服务或 Controller 方法(参见 SpringCache plugin 或 Cache Filter plugin)。这些通常在 Ehcache infrastructure 之上实现.
显然,与频繁更改的(数据库)数据或相当多变的 Web 输出相比,缓存可能更适合静态数据。
最后,您可以“向其扔硬件”。 :-)
总之,在大型网站中支持或反对使用 Groovy/Grails 的最决定性因素应该是缓存是否适合特定网站的性质。
编辑:
至于Java的JIT编译器有没有机会介入的问题……
一个简单的 Groovy 类
class Hello {
def getGreeting(name) {
"Hello " + name
}
}
public class Hello
implements GroovyObject
{
public Hello()
{
Hello this;
CallSite[] arrayOfCallSite = $getCallSiteArray();
}
public Object getGreeting(Object name) {
CallSite[] arrayOfCallSite = $getCallSiteArray();
return arrayOfCallSite[0].call("Hello ", name);
}
static
{
Long tmp6_3 = Long.valueOf(0L);
__timeStamp__239_neverHappen1288962446391 = (Long)tmp6_3;
tmp6_3;
Long tmp20_17 = Long.valueOf(1288962446391L);
__timeStamp = (Long)tmp20_17;
tmp20_17;
return;
}
}
A method invocation in Groovy consists usually of several normal method calls, where the arguments are stored in a array, the classes of the arguments must be retrieved, a key is generated out of them, a hashmap is used to lookup the method and if that fails, then we have to test the available methods for compatible methods, select one of the methods based on the runtime type, create a key for the hasmap and then in the end, do a reflection like call on the method.
关于mysql - Groovy 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4104688/
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin
我正在使用Ruby解决一些ProjectEuler问题,特别是这里我要讨论的问题25(Fibonacci数列中包含1000位数字的第一项的索引是多少?)。起初,我使用的是Ruby2.2.3,我将问题编码为:number=3a=1b=2whileb.to_s.length但后来我发现2.4.2版本有一个名为digits的方法,这正是我需要的。我转换为代码:whileb.digits.length当我比较这两种方法时,digits慢得多。时间./025/problem025.rb0.13s用户0.02s系统80%cpu0.190总计./025/problem025.rb2.19s用户0.0
我正在寻找一个用ruby演示计时器的在线示例,并发现了下面的代码。它按预期工作,但这个简单的程序使用30Mo内存(如Windows任务管理器中所示)和太多CPU有意义吗?非常感谢deftime_blockstart_time=Time.nowThread.new{yield}Time.now-start_timeenddefrepeat_every(seconds)whiletruedotime_spent=time_block{yield}#Tohandle-vesleepinteravalsleep(seconds-time_spent)iftime_spent
我已经开始使用mysql2gem。我试图弄清楚一些基本的事情——其中之一是如何明确地执行事务(对于批处理操作,比如多个INSERT/UPDATE查询)。在旧的ruby-mysql中,这是我的方法:client=Mysql.real_connect(...)inserts=["INSERTINTO...","UPDATE..WHEREid=..",#etc]client.autocommit(false)inserts.eachdo|ins|beginclient.query(ins)rescue#handleerrorsorabortentirelyendendclient.commi
如果用户是所有者,我有一个条件来检查说删除和文章。delete_articleifuser.owner?另一种方式是user.owner?&&delete_article选择它有什么好处还是它只是一种写作风格 最佳答案 性能不太可能成为该声明的问题。第一个要好得多-它更容易阅读。您future的自己和其他将开始编写代码的人会为此感谢您。 关于ruby-on-rails-如果条件与&&,是否有任何性能提升,我们在StackOverflow上找到一个类似的问题:
我编写了一个Ruby应用程序,它可以解析来自不同格式html、xml和csv文件的源中的大量数据。我如何找出代码的哪些区域花费的时间最长?有没有关于如何提高Ruby应用程序性能的好资源?或者您是否有任何始终遵循的性能编码标准?例如,你总是用加入你的字符串吗?output=String.newoutput或者你会使用output="#{part_one}#{part_two}\n" 最佳答案 好吧,有一些众所周知的做法,例如字符串连接比“#{value}”慢得多,但是为了找出您的脚本在哪里消耗了大部分时间或比所需时间更多,您需要进行分
LL库和HAL库简介LL:Low-Layer,底层库HAL:HardwareAbstractionLayer,硬件抽象层库LL库和hal库对比,很精简,这实际上是一个精简的库。LL库的配置选择如下:在STM32CUBEMX中,点击菜单的“ProjectManager”–>“AdvancedSettings”,在下面的界面中选择“AdvancedSettings”,然后在每个模块后面选择使用的库总结:1、如果使用的MCU是小容量的,那么STM32CubeLL将是最佳选择;2、如果结合可移植性和优化,使用STM32CubeHAL并使用特定的优化实现替换一些调用,可保持最大的可移植性。另外HAL和L
我正在尝试绕过rails配置这个极其复杂的迷宫。到目前为止,我设法在ubuntu上设置了rvm(出于某种原因,ruby在ubuntu存储库中已经过时了)。我设法建立了一个Rails项目。我希望我的测试项目使用mysql而不是mysqlite。当我尝试“rakedb:migrate”时,出现错误:“!!!缺少mysql2gem。将其添加到您的Gemfile:gem'mysql2'”当我尝试“geminstallmysql”时,出现错误,告诉我需要为安装命令提供参数。但是,参数列表很大,我不知道该选择哪些。如何通过在ubuntu上运行的rvm和mysql获取rails3?谢谢。
是否存在GC.disable会降低性能的情况?只要我使用的是真正的RAM而不是交换内存,就可以这样做吗?我正在使用MRIRuby2.0,据我所知,它是64位的,并且使用的是64位的Ubuntu:ruby2.0.0p0(2013-02-24revision39474)[x86_64-linux]Linux[redacted]3.2.0-43-generic#68-UbuntuSMPWedMay1503:33:33UTC2013x86_64x86_64x86_64GNU/Linux 最佳答案 GC.disable将禁用垃圾回收。像rub