2009-08-15 6 views
6

Sto continuando ad approfondire Erlang. Sto pensando di iniziare il mio prossimo progetto web usando Erlang, e in questa fase l'unica cosa che mi mancherà davvero di Ruby on Rails è ActiveRecord.ActiveRecord for Erlang

Esiste una buona tecnologia alternativa per Erlang?

Aggiornamento: Il più vicino sono venuto a una soluzione è quella di ErlyDB, un componente di ErlyWeb.

ErlyDB è un generatore di astrazione database per Erlang. ErlyDB combina i metadati del database ei metadati forniti dall'utente per generare funzioni che consentono di eseguire operazioni comuni di accesso alle operazioni in modo intuitivo. Lo standard fornisce anche una singola API per il funzionamento di con diversi motori di database (sebbene attualmente solo MySQL sia supportato), consentendo di scrivere il codice di accesso dati portatile .

+0

Non essendo un utente di ruby, potresti descrivere le funzionalità di ActiveRecord che desideri? È qualcosa che genera codice da uno schema SQL? – Christian

risposta

4

Ebbene, i principali vantaggi di ActiveRecord (come la vedo io) sono:

  1. È possibile persistere gli oggetti in un database relazionale quasi trasparente.
  2. È possibile cercare nel database qualsiasi attributo dei propri oggetti.
  3. È possibile convalidare oggetti durante la loro permanenza.
  4. È possibile avere richiamate per l'eliminazione, l'aggiornamento o l'inserimento di oggetti.

Con mnesia:

  1. È possibile persistere i dati Erlang assolutamente trasparente.
  2. Utilizzando la corrispondenza di modelli, è possibile cercare nel database qualsiasi attributo dei dati o la loro combinazione.
  3. QLC offre un'interfaccia di query piacevole per i casi in cui la corrispondenza del modello non è sufficiente.

Nessuna soluzione per la convalida e callback, però ...

Quindi, cos'altro avete in ActiveRecord che manca mnesia?

+2

Immagino che parte del problema sia che non sono ancora pronto a rinunciare al mio RDBMS. Conosco gli strumenti, so come ottimizzare e ridimensionare. Forse questa è solo paura dell'ignoto. –

+2

Quindi fare il grande passo. Ti andrà bene solo per sapere tutti i problemi quando lo fai in modo diverso. È molto più facile fare una buona telefonata quando conosci più approcci. A volte una cassetta degli attrezzi più grande può tornare utile. –

+1

Mi chiedo se il problema sia che Erlang non è adatto alle app Web al momento. –

4

Non penso ci sia davvero al momento di questo scritto. Ciò può essere dovuto al fatto che i tipi di sistemi scritti in erlang e il tipo di persone che li scrivono non richiedono realmente database relazionali. Vedo molto più codice usando mnesia, CouchDB, Tokyo Cabinet e altre tecnologie di database alternative.

Questo non vuol dire che qualcuno potrebbe non voler creare qualcosa come la registrazione attiva. Non è stato proprio un bisogno ancora. Forse sarai il primo? :-)

1

Alcuni googling rivela libs/clienti/wrapper per CouchDB descritti "ActiveRecord come le biblioteche come CouchFoo", e consigliano di evitare:

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#

come al tuo commento su "non adatto per le app Web ", penso che i pezzi ci siano: mochiweb, divano, imbardata, azoto, erlyweb. Ci sono alcuni strumenti potenti, un paradigma molto diverso, certamente, da rotaie, django e PHP.

+0

Questa è roba davvero interessante e riflette il pensiero che ho attraversato di recente. Voglio ActiveRecord perché sono così legato a un modo particolare di pensare e ragionare sul software. Sto guardando molto più seriamente a CouchDB come alternativa a MySQL. –

1

Potreste essere interessati a "BossRecords" di Chicago Boss:

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

Sono abbastanza esplicitamente modellate sul modello Active Record, e utilizzano un sacco di magia compilatore per rendere la sintassi pulitissimi. BossRecords supporta le associazioni save/validate e has_many/belongs_to. Gli attributi nel tuo modello dati sono resi disponibili attraverso le funzioni generate (ad es. "Dipendente: first_name()").