2009-04-01 19 views
7

Estoy familiarizado con CouchDB y la idea de mapear sus resultados a los objetos de Scala, así como encontrar una forma natural de iterar con ella, vino de inmediato.¿Es CouchDB el más adecuado para lenguajes dinámicos?

Pero veo que los lenguajes dinámicos como Ruby y Javascript hacen las cosas muy bien con el enfoque json/document-centric/shchema-free de CouchDB.

¿Algún buen enfoque para hacer cosas con Couch en idiomas estáticos?

+0

Puede ver esta pregunta como: ¿Los idiomas dinámicos son los más adecuados para CouchDB? – paulosuzart

Respuesta

17

Entiendo que CouchDB funciona exclusivamente con objetos JSON. Como JSON está sin tipo, es tentador creer que es más adecuado para lenguajes dinámicos. Sin embargo, XML también está generalmente sin tipo, y Scala tiene un soporte de biblioteca muy bueno para crear y manipular XML. Para una exploración de las funciones de XML de Scala, consulte: http://www.ibm.com/developerworks/library/x-scalaxml/

Igualmente con JSON. Con el soporte de biblioteca adecuado, lidiar con JSON puede sentirse natural incluso en lenguajes estáticos. Para un enfoque de tratar con datos JSON en Scala, consulte este artículo: http://technically.us/code/x/weaving-tweed-with-scala-and-json/

Con bases de datos de objetos en general, a veces es conveniente definir un "modelo" (utilizando, por ejemplo, una clase en el idioma) y usar JSON o XML o algún otro lenguaje de documento sin tipo para ser una representación serializada de la clase. El soporte apropiado de la biblioteca puede traducir entre el formulario serializado (como JSON) y las estructuras de datos en memoria, con el tipado estático y todos los beneficios que vienen con él. Para ver un ejemplo de este enfoque, consulte Lift's Record, que agregó conversiones ay desde JSON: http://groups.google.com/group/liftweb/msg/63bb390a820d11ba

+0

Gracias Ortiz!Sería bueno hacer con JSON lo que podamos con XML en Scala, ¿verdad? – paulosuzart

+1

Sí. Creo que la biblioteca de n8han (vinculada anteriormente) es un comienzo fantástico, pero se puede hacer mucho más para mejorar el soporte de la biblioteca JSON en Scala. –

3

Me pregunto si hizo la pregunta correcta. ¿Por qué estás usando Scala, y no idiomas dinámicos? Probablemente debido a algunas bondades que Scala le proporciona que es importante para usted y, supongo, la calidad de su código. Entonces, ¿por qué no está utilizando una base de datos "estáticamente estátizada" (es decir, basada en esquemas)? Una vez más estoy asumiendo, pero la capacidad de responder al cambio me viene a la mente. Las bases de datos SQL de producción tienen una tendencia horrible de ser muy difíciles de cambiar y refactorizar.

Por lo tanto, sus datos tipos débiles, y su código es fuertemente tipado. Pero en algún lugar necesitarás hacer la transición. Esto significa que en algún lugar, tendrá un "esquema" para sus datos, aunque la base de datos no tenga ninguno. Este esquema está definido por las clases a las que está asignando los documentos de Couch. Esto tiene perfecto sentido; La mayoría de los usos de Couch que he visto tienen una clave como "tipo" y para cada tipo al menos un conjunto común de claves. Ya sea para asignar manualmente el JSON a estas clases de Scala o para usar, p. sofisticadas herramientas de reflexión (más lentas pero bonitas), o alguna característica Scala aún más elegante en la que soy nuevo es un detalle. Comience con el fácil pero lento, y luego vea si es lo suficientemente rápido.

Lo importante ocurre cuando tus clases, es decir, tu esquema, cambian. En lugar de ALTERAR tus tablas, puedes simplemente cambiar la clase, asegurarte de que haces algo inteligente si para un documento falta una clave que esperas (porque estaba basada en una versión anterior de la clase), y listo. Responder al cambio nunca ha sido tan fácil, y aún así su código está tan tipado estáticamente como puede obtenerse.

Si esto no es lo suficientemente bueno para usted, y desea que ningún esquema en absoluto, entonces usted está efectivamente diciendo que usted no desea utilizar las clases para definir y manipular sus datos. Eso está bien también (aunque no puedo imaginar un uso), pero luego la pregunta no es acerca de los lenguajes dinámico frente a los estáticos, sino acerca de si usar o no los lenguajes basados ​​en clases.

Cuestiones relacionadas