2009-08-15 16 views
6

Sigo profundizando en Erlang. Estoy pensando en comenzar mi próximo proyecto web usando Erlang, y en este momento lo único que realmente extrañaré de Ruby on Rails es ActiveRecord.ActiveRecord para Erlang

¿Existe una buena tecnología alternativa para Erlang?

Actualización: Lo más cerca que he llegado a una solución es ErlyDB, un componente de ErlyWeb.

ErlyDB es una capa de abstracción de la base de datos generador para Erlang. ErlyDB combina los metadatos de la base de datos y los metadatos provistos por el usuario para generar funciones que le permiten realizar operaciones comunes de acceso a los datos de una manera intuitiva. Es también proporciona una única API para trabajar con diferentes motores de base de datos (aunque actualmente, solo MySQL es compatible), lo que le permite escribir código de acceso a datos portátil.

+0

No siendo usuario de ruby, ¿podría describir las características en ActiveRecord que desea? ¿Es algo que genera código desde un esquema de SQL? – Christian

Respuesta

4

Bueno, las principales ventajas de ActiveRecord (como yo lo veo) son:

  1. Puede persistir los objetos en una base de datos relacional casi transparente.
  2. Puede buscar en la base de datos por cualquier atributo de sus objetos.
  3. Puede validar objetos cuando los persisten.
  4. Puede tener devoluciones de llamada al eliminar, actualizar o insertar objetos.

Con Mnesia:

  1. Puede persistir los datos de Erlang absolutamente transparente.
  2. Utilizando la coincidencia de patrones, puede buscar en la base de datos por cualquier atributo de sus datos o su combinación.
  3. QLC le ofrece una interfaz de consulta agradable para casos en los que la coincidencia de patrones no es suficiente.

No hay soluciones para validar y devoluciones de llamada, sin embargo ...

Así que, ¿qué más tiene en ActiveRecord que carece de Mnesia?

+2

Supongo que parte del problema es que no estoy listo para abandonar mi RDBMS. Conozco las herramientas, sé cómo optimizar y escalar. Quizás esto es solo miedo a lo desconocido. –

+2

Luego da el paso. Sería bueno para ti saber todos los problemas cuando lo haces de manera diferente. Es mucho más fácil hacer una buena llamada cuando conoces múltiples enfoques. Una caja de herramientas más grande puede ser útil a veces. –

+1

Me pregunto si parte del problema es que Erlang no es realmente adecuado para aplicaciones web en este momento. –

4

No creo que realmente exista al momento de escribir esto. Esto puede deberse a que los tipos de sistemas que se escriben en erlang y el tipo de personas que los escriben realmente no requieren bases de datos relacionales. Veo mucho más código usando mnesia, CouchDB, Tokyo Cabinet y otras tecnologías de base de datos alternativas.

Eso no quiere decir que alguien no quiera crear algo así como un registro activo. Simplemente no ha sido realmente una necesidad todavía. ¿Tal vez serás el primero? :-)

1

algunas google revela libs/clientes/contenedores para couchdb describen "ActiveRecord como bibliotecas como CouchFoo", y aconsejan mantenerse al margen:

http://upstream-berlin.com/2009/03/31/the-case-of-activerecord-vs-couchdb/

http://debasishg.blogspot.com/2009/04/framework-inertia-couchdb-and-case-of.html#

cuanto a su comentario sobre "no adecuado para aplicaciones web todavía ", creo que las piezas están ahí: mochiweb, couch, yaws, nitrogen, erlyweb. Hay algunas herramientas poderosas, paradigmas muy diferentes, sin duda, de los rieles, django y PHP.

+0

Esto es realmente algo interesante, y refleja el pensamiento que he tenido recientemente. Quiero ActiveRecord porque estoy tan atado a una forma particular de pensar y razonar sobre el software. Estoy mirando mucho más seriamente a CouchDB como una alternativa a MySQL. –

1

Usted puede estar interesado en "BossRecords" de Chicago, jefe:

http://www.chicagoboss.org/api-record.html

son bastante modelados de forma explícita en el patrón Active Record, y utilizan una gran cantidad de magia compilador para hacer la sintaxis absolutamente limpio. BossRecords admite guardar/validar, así como has_many/belongs_to asociaciones. Los atributos en su modelo de datos están disponibles a través de funciones generadas (por ejemplo, "Empleado: first_name()").