Pregunta acerca de Cassandra

Por qué el infierno en la tierra nadie escribe un MOTOR de base de datos en Java ?

Puedo entender por qué usted quiere tener una interfaz Java, pero el motor…

Yo estaba bajo la impresión de que no hay nada más rápido que C/C++, y que un motor de base de datos no debería ser más lento que la velocidad máxima, y ciertamente no utiliza la recolección de basura…

¿Alguien puede explicar a mí lo posible el sentido de que hace /¿por qué Cassandra puede ser más rápido que el normal de SQL que se ejecuta en C/C++ de código ?

Editar:

Lo siento por el «¿por Qué el infierno en la tierra», pero realmente no tenía ningún sentido para mí.


Me olvidé de considerar que una base de datos, a diferencia de la media de jardín-variedad programas de usuario, debe ser iniciado sólo una vez y, a continuación, se ejecuta durante un tiempo muy largo, y probablemente también como el único programa en el servidor, lo que evidentemente hace que para una importante diferencia de rendimiento.

Yo estaba más comparando/hace referencia a un ‘disfuncional’ (por decirlo suavemente) de Java impuesto programa que estaba usando en el momento de escribir (o más bien habría gustado uso).

De hecho, a diferencia del uso de Java para los programas de impuestos, el uso de Java para escribir un programa del servidor dedicado tiene perfecto sentido.

  • fyi: c/c++ no es la respuesta para todo. si usted lee la wiki-artículo, usted hubiera visto a facebook, digg, etc, son el uso de cassandra y yo creo que cuando se trata de la escalabilidad de java es simplemente impresionante.
  • -1 argumentativo
  • IMO no hay nada inherentemente subjetiva y argumentativa en esta pregunta. El texto («¿por Qué el infierno») claramente las necesidades de mejora, pero en general creo que esta es una pregunta válida.
  • Usted puede hacer todo esto: java-source.net/open-source/database-engines
  • Hadoop está escrito en Java. Amazon dinamo backend está escrito en Java.
  • Por supuesto es subjetivo y argumentativa, no hay ninguna respuesta correcta a esta «pregunta», por lo que cada respuesta publicada se basa en opiniones.
  • b debe haber sido alguien de la idea de comenzar a escribir en Java, y como tal, sus justificaciones, ya sea racional o estética, sería la respuesta correcta a la pregunta
  • C Sí, pero eso no era matt b de la justificación. Que sólo un grupo de personas que tienen el conocimiento para responder a la pregunta no es una pregunta argumentativa. Por ejemplo, C# los miembros de equipo PARA dar respuestas autorizadas en las preguntas acerca de las decisiones de diseño en C#.
  • Kirkham – no estoy tratando de justificar @matt b de la línea de argumento. Pero su conclusión es correcta, de la OMI.
  • «¿Por qué el infierno en la tierra», per se, no argumentativo. Concedido, la mayoría de las veces lo es, pero no necessarely sólo implica una opinión, pero también curiosidad, demasiado (concedido, acerca de algo que creen que es más probable que el mal). Debería haber elegido mis palabras – o mejor mis pensamientos – más detenidamente en el primer lugar. Pero creo que Kico Lobo respuesta fue muy buena, y ha cambiado mi opinión. Tiene sentido después de todo. Me olvidé de considerar que una base de datos debe ser iniciado sólo una vez… estúpido… y el desbordamiento de búfer razón es bastante buena, también.
  • He aquí una buena respuesta a tu pregunta: programmers.stackexchange.com/questions/110634/…
  • En casi todos los contextos, incluidos los debates del programa de las decisiones de diseño, anteponiendo a cualquier pregunta con «¿por qué el infierno en la tierra» se de por sí argumentativo. Supongo que ciertas discusiones teológicas pueden ser exentos.
  • He leído hoy (26-septiembre-2015) New-Age C++ Aumenta de código Abierto NoSQL Cassandra Velocidad de 10x. Resumen: Una reescritura de Cassandra, llamado ScyllaDB, con Seastar — un framework de C++ para escribir complejo asincrónica aplicaciones con un rendimiento óptimo del hardware moderno, es 10 veces más rápido.
  • ScyllaDB es más rápido que Cassandra (Benchmark) y parte de la razón como explianed en la arquitectura documento es la forma en que la JVM funciona con la pila de red. Java ES más lento que C++ para esta aplicación en particular.

5 Comentarios

  1. 55

    Puedo ver un par de razones:

    • De seguridad: es más fácil escribir de seguridad de software en Java que en C++ (recuerde que los desbordamientos de buffer?)
    • Rendimiento: no es QUE peor. Definitivamente es peor en el inicio, pero una vez que el código está en marcha y funcionando, no es una gran cosa. En realidad, usted tiene que recordar aquí un punto importante: el código Java se optimiza continuamente por la VM, por lo que en algunas circunstancias, se vuelve más rápido que C++
    • Y, en cuanto a rendimiento, Java sistemas fácilmente puede ser más rápido que el equivalente en C++ sistemas, no porque subyacente del lenguaje o de la JVM, pero sólo porque uno puede pasar más tiempo en el diseño y optimizaciones, en lugar de tener que escribir, decir, personalizado subsistema de manejo de memoria. Que es: sólo porque C++ sistemas puede ser rápido no garantiza que sean, lo que importa más son los desarrolladores, de lo buenos que son con las herramientas que utilizan. Además, distribuido a las tiendas, real cuellos de botella de la red y e/S, junto con la coordinación, no de la CPU.
    • Recientemente he tenido SE Linux en mi Portátil. SE Linux evita desbordamientos de búfer de ejecución, razón por la que el 1 es con los mismos muertos. Por CIERTO, no existen recolectores de basura para C++ ? Creo que lo leí una vez en algún lugar…
    • SELinux no prevenir desbordamientos de buffer, el desbordamiento de búfer que podría suceder, pero sería unexploitable. Sin embargo, el desbordamiento de búfer todavía sería bloquear el programa.
    • Por desgracia, los desbordamientos de búfer no está muerto del todo. Consulte en.wikipedia.org/wiki/Return-oriented_programming
    • Axelson: Derecho, pero ese es el punto. Es cierto que todavía se bloquea el programa. Pero de esa manera, es un desbordamiento de búfer meramente útil para los ataques de DOS.
    • Borgwardt: Hmmm, interesante. Tengo que echar un vistazo a eso. Pero sin duda es mucho más difícil.
    • ¿Cómo cassandra controlar el uso de memoria de también si es escrito en JAVA? Se sabe que JAVA tiene una gran sobrecarga de memoria para cada objeto de manera que si sería escrito en C++ más objetos pueden ser colocados en la memoria RAM. Tal vez ellos tienen algunas técnicas avanzadas para mejorar esto.
    • SELinux NO prevenir desbordamientos de buffer o de otro puntero basado en los errores. Previene algunos, y puede contener las infracciones a la hackeado aplicación. El único y verdadero camino para solucionar los desbordamientos de búfer es todavía JIT:ing o la interpretación de código, mientras que la adición de fallos de cheques. Tenga en cuenta que muchos de C/C++ aplicaciones dejaría de funcionar si tenían todos los mecanismos de protección de Java había. Esa es una de las razones por las que no hay plena compilador C/C++ orientación Bytecode de Java.
    • Memoria de asignación/desasignación son un poco lentos en Java, y hay una sobrecarga asociada con los Objetos. Algunos de estos son la falta de optimización en la Máquina Virtual y hay productos de terceros que son más rápidos. Algunos de los que no puede ser eliminado fácilmente sin perder la funcionalidad que el código que se podría esperar. Sin embargo, hay estrategias y patrones que hace que todo esto no sea un problema. La creación de objetos como son C++ estructuras son errores de novato, ser conservador con sus objetos y su rendimiento va a estar bien.

  2. 105

    ¿A qué te refieres, C++? La mano codificados de la asamblea sería más rápido si usted tiene un par de décadas de repuesto.

    • +1, yo iba a escribir un comentario similar
    • No, él dijo «C/C++», que es el mítico más rápido que todo el lenguaje, pero cuyo valor depende no especificado orden de ejecución.
    • Jajaja, que la respuesta que se esperaba. Me pareció gracioso. PS: C (la velocidad de la luz) no es MYTHICALLY más rápido de todo. Si el punto de referencia, vemos que en REALIDAD es (que van desde 5 hasta 30 veces) más rápido que Java, en la misma inversión de tiempo de desarrollo y el nivel de competencia). Además, hoy en día, las grandes cantidades de mano codificado de la asamblea es en la mayoría de los casos más lento que C, debido a que el compilador de C de la optimización es bastante bueno, y el C stdlib está muy optimizado. Es todavía más rápido que C++, aunque. Y puede tirar su asamblea cuando el procesador cambia. No es así con C.
    • Tengo que conectarme al igual que su respuesta: «la Mano codificados de la asamblea sería más rápido si usted tiene un par de décadas de sobra».
    • Con JIT Java obtener un rendimiento que C no puede alcanzar. JIT es el uso de la información sólo está disponible en tiempo de ejecución.
    • Humanos código legible? No necesitamos ningún apestoso’ legible el código!

  3. 33

    ¿Por qué el infierno en la tierra nadie escribe un MOTOR de base de datos en JAVA ?

    Plataforma de independencia es un gran factor para servidores, porque usted tiene un montón más de hardware y sistema operativo heterogeneidad de los Pc de sobremesa. Otro es la seguridad. No tener que preocuparse por los desbordamientos de búfer significa que la mayoría de la peor clase de agujeros de seguridad son simplemente imposibles.

    Yo estaba bajo la impresión de que
    no hay nada más rápido que C/C++, y
    que un motor de base de datos no debería ser
    más lento que la velocidad máxima, y
    ciertamente no el uso de la basura
    colección de…

    Su impresión es incorrecta. C/C++ no es necesariamente más rápido que Java, moderno y recolectores de basura tienen una gran parte en que debido a que permiten la creación de objetos a ser increíblemente rápido.

    • Michael – ¿puedes elaborar en tu comentario re objeto de la creación de de ser rápido porque el recolector de basura ?
    • (nota: esto se simplifica…) la creación de Objetos (no a la destrucción) puede ser más eficiente con código administrado como un recolector de compactación se trate de organizar toda la memoria libre para el proceso en un área contigua. Cuando uno necesita asignar una cierta cantidad de memoria ya sabemos que si tenemos suficiente, y puede evitar tratar de caminar por la memoria del proceso, tratando de encontrar una zona de libre lo suficientemente grande para lo que necesitamos. El collorary a esto, sin embargo, es que después de la GC limpia la memoria que necesita para compactar todos los GC sobrevivientes juntos en la memoria
    • con un moderno sistema de GC, la memoria liberada es compacta, haciendo que la asignación de memoria trivialmente simple en comparación con una típica malloc.
  4. 14

    No olvides que la Java Vm hacer uso de just-in-time (JIT) del motor que realizar sobre la marcha optimizaciones para que Java comparable a la de C++ en términos de velocidad. Teniendo en cuenta que Java es bastante productiva de idioma (a pesar de sus detractores) y portátil, junto con el JIT optimización de la capacidad, significa que Java no es irrazonable elección para algo como esto.

    • Tomando el contexto de la pregunta, todavía me pregunto si el rendimiento en Java es similar, ¿por qué «la mayoría» de la interfaz de usuario basada en Java son solo basura, los desarrolladores de la culpa o la interfaz de usuario de Java libs ? Descargo de responsabilidad: yo soy un Java detractores, debido a que la mayoría de las cosas que he trabajado con escrito en Java tuvo un rendimiento pobre, pero estoy feliz de aprender diferente.
  5. 7

    La penalización de rendimiento para los modernos tiempos de ejecución de Java no es muy grande y la programación en Java es menos propenso a errores que en c.

    • «Programación en Java es menos propenso a errores que en C». Eso es un heck de un comunicado, el cuidado de la espalda con la evidencia?
    • Venga, Dominic. Sí, todos sabemos que es más que posible escribir (en su mayoría) libre de errores de código en C. Pero usted no puede negar Java le da menos cuerda para colgar con.
    • +1 para el Domingo. he visto muchos problemas con descuido, escrito en código java, que ninguno de los que java magia (gc, etc) puede ayudar. las aplicaciones java no pérdida de la memoria, de C? jaja, sí, usted desea!
    • seguro. yo no se puede pensar de cualquier proyecto que había en lugar de hacer en C que en Java, yo solo objeto a la declaración general. Que puedo pensar de la gente de por aquí que podría escribir algo en C que sería un heck de mucho más sólido que algo podría escribir en Java. Todo lo que estoy diciendo es que hay buenas C, y hay buena Java – uno no es necesariamente superior a la de los otros.
    • Me gustaría tener pérdidas de memoria más de desbordamiento de búfer en cualquier momento
    • podría ser incluso la gente que escribe incluso mejor de la asamblea, que no significa que no se puede comparar la dificultad de escribir código seguro de entre las lenguas
    • No creo que uno es superior al otro cualquiera. Cada uno de ellos tienen diferentes fortalezas y énfasis (y, por supuesto, diferentes expertos). Pero yo creo que Java es menos errores/propensas/.
    • +1 para el Domingo: he visto sooooooo muchos errores en Java y PHP y Python y TCL y cualquier otro idioma que quieras) código que yo no voy a creer las promesas que indica «este modelo es menos propenso a errores que uno». Tienes que tener cuidado con estas declaraciones!
    • Los errores en estos idiomas son un subconjunto de los errores posibles en C
    • Tal vez un poco off-topic, pero hoy en día, SE Linux que prohíbe los desbordamientos del búfer de la ejecución. Así que no hay más problema de seguridad allí.
    • Las pérdidas de memoria problema en Java & C son diferentes de los problemas. En Java, tiene pérdida de memoria porque no la liberación del objeto de referencia. En C, puede ser que se olvide de la liberación de referencia de objeto O el puntero apunte a una dirección errónea. Que doble el riesgo, en comparación con Java

Dejar respuesta

Please enter your comment!
Please enter your name here