为什么Cassandra用Java编写?

Ste*_*ger 33 c c++ java database-design cassandra

关于Cassandra的 问题

为什么地球上的任何人都会用Java编写数据库ENGINE?
我可以理解为什么你想要一个Java接口,但引擎......

我的印象是没有什么比C/C++更快,并且数据库引擎不应该比最大速度慢,当然不使用垃圾收集......

任何人都能解释一下,为什么Cassandra可以比在C/C++代码上运行的普通SQL更快?

编辑:
对不起"为什么地球上的地狱"的一部分,但它对我来说真的没有任何意义.
我忽略了一个数据库,不像一般的花园变量用户程序,只需要启动一次,然后运行很长一段时间,也可能作为服务器上唯一的程序,这显然是一个重要的性能差异.

我更多地比较/引用了一个'不合适的'(温和地说)我在撰写本文时使用的Java税收计划(或者更愿意使用).

实际上,与将Java用于税务程序不同,使用Java编写专用服务器程序非常有意义.

Mar*_*tin 105

你是什​​么意思,C++?如果您有几十年的时间,手动编码组件会更快.

  • 哈哈哈,答案是可以预料的.不过我觉得很有趣.PS:C(光速)并不比所有东西都快.如果您进行基准测试,您会发现它的开发时间和能力水平相同,实际上比Java快(从5到30倍).此外,如今,大多数情况下,大量的手动编码程序集比C慢,因为C编译器优化非常好,并且C stdlib经过了大量优化.不过,它仍然比C++更快.当处理器发生变化时,您可以丢弃组件.C不是这样 (9认同)
  • 不,他说"C/C++",这比任何语言都要神话般快,但其价值取决于未指明的执行顺序. (6认同)
  • +1,我即将写一篇类似的评论 (2认同)

Kic*_*obo 55

我可以看到几个原因:

  • 安全性:在Java中编写安全软件比在C++中编写更容易(还记得缓冲区溢出吗?)
  • 表现:情况并非如此糟糕.它在启动时肯定会更糟糕,但是一旦代码启动并运行,它就不是一件大事了.实际上,你必须记住一个重点:VM代码不断优化,因此在某些情况下,它比C++更快

  • 而且,在性能方面,Java系统可以比同等的C++系统更快,不是因为底层语言或JVM,而是因为人们可以花更多的时间在设计和优化上,而不是必须编写自定义内存管理子系统.那就是:仅仅因为C++系统可以快速并不能保证它们 - 开发人员更重要的是,他们使用的工具有多好.此外,对于分布式存储,真正的瓶颈是网络和I/O; 与协调,而不是CPU. (14认同)
  • @Quandary:不幸的是,缓冲区溢出并没有死.请参见http://en.wikipedia.org/wiki/Return-oriented_programming (5认同)
  • SELinux不会阻止缓冲区溢出,缓冲区溢出仍然会发生,但它是不可利用的.但是缓冲区溢出仍会导致程序崩溃. (3认同)

Mic*_*rdt 33

地球上为什么有人会在JAVA中编写数据库ENGINE?

平台独立性对服务器来说是一个非常重要的因素,因为与桌面PC相比,硬件和操作系统的异构性要高得多.另一个是安全.不必担心缓冲区溢出意味着大多数最糟糕的安全漏洞根本不可能.

我的印象是没有什么比C/C++快,并且数据库引擎不应该比最大速度慢,当然也不会使用垃圾收集......

您的印象不正确.C/C++不一定比Java快,而现代垃圾收集器在其中占有很大的比重,因为它们使对象创建速度极快.

  • (注意这是简化的...)对于托管代码,对象创建(而不是破坏)可以更有效,因为压缩垃圾收集器将尝试在连续区域中为进程安排所有可用内存.当我们需要分配一定数量的内存时,我们已经知道我们是否有足够的内存,并且可以避免尝试遍历流程的内存,试图找到足够大的空闲区域以满足我们的需求.尽管如此,在GC清理内存之后,需要将所有GC幸存者压缩在内存中 (5认同)
  • 迈克尔 - 你可以详细说明你的评论反对*创造*由于垃圾收集器快速? (3认同)
  • @Brian - 使用现代GC,释放内存被压缩,与典型的`malloc`相比,使内存分配变得简单. (3认同)

Bri*_*new 14

不要忘记,Java VM使用即时(JIT)引擎,该引擎执行动态优化,使Java在速度方面与C++相当.请记住,Java是一种非常高效的语言(尽管它是反对者)并且可移植,并且具有JIT优化功能,这意味着Java对于类似的东西来说并不是一个不合理的选择.

  • 考虑到问题的上下文,我仍然想知道 Java 中的性能是否相似,为什么“大多数”基于 Java 的 UI 只是垃圾、开发人员错误或 UI Java 库?免责声明:我是 Java 的反对者,因为我用 Java 编写的大多数东西的性能都很差,但我很高兴学习不同的东西。 (2认同)

Ott*_*ger 7

现代Java运行时的性能损失并不大,Java中的编程比c中的编程容易出错.

  • 来吧,多米尼克.是的,我们都知道在C语言中编写(大多数)无错误的代码是可能的.但是你不能否认Java会让你不再自言自语. (45认同)
  • 这些语言中的错误是C中可能出错的子集 (9认同)
  • "Java编程比C语言更容易出错".这是一个声明,注意用一些证据支持它? (8认同)
  • @pulegium:我随时都会在缓冲区溢出时发生内存泄漏 (8认同)
  • +1为Dominic.我已经看到了粗略编写的java代码这么多问题,这些java魔法(gc等)都没有帮助.java应用程序不像C那样泄漏内存?哈哈,是的,你希望! (5认同)