ventajas tutorial postgres desventajas caracteristicas scala mongodb architecture scalaquery casbah

scala - desventajas - postgres nosql tutorial



NoSQL(por ejemplo, MongoDB) o RDMS(por ejemplo, PostgreSQL) para el nuevo proyecto de Scala? (3)

Actualmente estoy en una situación similar, y dado que tengo cierta experiencia con el desarrollo web y las bases de datos SQL, lo tomé como una oportunidad para trabajar con MongoDB, Cashbah (y Scalatra ). Mi experiencia es muy limitada y el proyecto y la cantidad de datos con los que estoy trabajando son muy pequeños, pero aquí hay algunas observaciones que hice.

  • Para los pocos conjuntos de datos que tengo, el rendimiento no parece motivar ni a SQL ni a NoSQL. Sin embargo, el rendimiento en presencia de grandes cantidades de datos a menudo aparece como una razón para usar NoSQL, por ejemplo, en Wikipedia.

  • Mis documentos (entradas en la base de datos) surgen de pruebas de evaluación comparativa, y principalmente tienen una estructura estática, y soy optimista de que podría almacenarlos en una base de datos SQL de esquema fijo. Sin embargo, algunas subestructuras no son estáticas, por ejemplo, se agregan nuevos casos de prueba, se rastrean nuevas estadísticas y se eliminan otras. Esta fue mi principal motivación para probar una base de datos NoSQL sin esquema. Además, porque tenía la sensación de que el enfoque documental de MongoDB hace que sea mucho más obvio qué datos pertenecen juntos (es decir, a un documento), en contraste con las entradas en una base de datos relacional, donde los datos se distribuirán en varias tablas y filas , y donde un "documento" completo necesitaría ser reconstruido mediante combinaciones.

  • Herramientas como Lift-Json o Rogue le permiten trabajar con objetos regulares de Scala en un tipo seguro, aunque los datos se deserializan regularmente (a partir de) JSON. Sin embargo, esto naturalmente funciona mejor si la estructura de sus datos es principalmente estática, de lo contrario, le quedan cadenas de caracteres para acceder a sus datos (por ejemplo, para expandir los resultados de una consulta con Cashbah).



Si lo que más le preocupa es una representación coherente de datos en el lado del servidor y del cliente, los lenguajes como Opa o Haxe pueden ser de interés, ya que compilan código que puede ejecutarse en ambos lados. Consulte esta página para obtener los idiomas "multitarget" o "sin niveles".

Estoy desarrollando un nuevo proyecto en Scala. Es solo una aplicación para un montón de operaciones CRUD, sin embargo, debido a algunos requisitos excéntricos, Play2 o Lift no se ajustan a la ley, por lo que voy a desarrollar la aplicación desde cero. Esto significa que Anorm o ScalaQuery se convierten en opciones menos obvias para la integración de bases de datos, y me deja con la pregunta: ¿es hora de probar algo nuevo?

Mis últimas pilas de tecnología incluyen Java y PostgreSQL, y tengo experiencia con ORM y SQL simple. ¿Los sistemas de administración de bases de datos NoSQL como MongoDB son un buen reemplazo para un RDBMS típico o son tiendas de datos de aplicación de casos especiales? Además, ¿cómo afecta la elección de la base de datos al mayor diseño del sistema Scala (si es que lo hace)? Por ejemplo, el hecho de que esté utilizando una interfaz similar a JSON para hablar con la base de datos, y JSON entre la web y un servicio REST, no significa mucho si todo en el medio se convierte en objetos Scala, ¿o no?

Básicamente, estoy preguntando por la experiencia de alguien al pasar de bases de datos relacionales a objetos / documentos, utilizando Scala en particular. Sé que se promete una buena integración RDBMS en el próximo lanzamiento de SLICK. Entonces, si una compañía como TypeSafe decide hacer una integración RDBMS como parte de la pila de TypeSafe, entonces ¿estaré nadando río arriba integrándola en MongoDB usando Casbah, por ejemplo?

Disculpas si esta pregunta parece un poco vaga. Sin embargo, espero que alguien con los conocimientos o la experiencia adecuada pueda ayudar.

Actualizar:

Disculpas por no agregar enlaces a SLICK (es bastante nuevo). Aquí va:

Actualización 2:

Mi primera victoria personal para una tecnología suele ser la productividad del desarrollador , lo que se traduce en ligero y simple: rápido de aprender, fácil de mantener, sin magia.


Tengo demasiado tiempo para un comentario. Solo estaba tratando de relatar mi corta experiencia con Scala (hace unos 6 meses, aproximadamente cuando salió Play2, se convirtió rápidamente en mi idioma).

He disfrutado usando Salat / Casbah con MongoDB en mis últimos proyectos; la mayoría han estado en Play2, pero la última fue sin un framework webapp. Definitivamente no ha sentido ganas de nadar río arriba.

Diría que hay casos de uso particulares para los que no usaría mongo, pero funciona muy bien como un almacén de datos de objetos de propósito general, especialmente si espera consultar por id o índice y no necesita transacciones (y necesitará tipo de agregación ad-hoc mínimo).

Espere requerir un conjunto separado de servidores dedicados a mongodb (o usar un servicio dedicado a mongodb), pero supongo que eso es normal para la mayoría de las aplicaciones de bases de datos serias.

También utilicé Play2 / Anorm, que fue sorprendentemente agradable de usar para algunas páginas de informes de estilo ad hoc del panel de control. Empecé a tratar de ir a la ruta Squeryl, pero parecía más fácil de usar para las consultas de agregación únicas. No he mirado SLICK, pero parece interesante.


Es realmente difícil de decir sin saber qué problemas te gustaría que resolviera la aplicación.

Personalmente, he descubierto que mi productividad aumenta con NoSQL DB a través de REST / JSON. Sin embargo, tenga en cuenta que la mayoría de los DB NoSQL ofrecen interfaces REST que excluyen la necesidad de mucho middleware, Scala u otros, a menos que tenga la intención de escribir una aplicación web con una IU.

Si se trata de un ejercicio de aprendizaje, recomiendo probar varias cosas, ya que cada base de datos NoSQL tiene algo diferente que ofrecer a su conjunto de herramientas, y personalmente han encontrado CouchDB, Riak, Neo4j y MongoDb con varias ventajas e inconvenientes y buenos para diferentes propósitos.

Espero que esto ayude, buena suerte.