The following module was proposed for inclusion in the Module List: modid: Storm DSLIP: adpOp description: Object-relational mapping userid: JHALLOCK (Jeffrey Ray Hallock) chapterid: 7 (Database_Interfaces) communities: Moose mailing list, perlmonks
similar: KiokuDB, Fey::ORM, Pixie, Frost, OOPS, Tangram, DBIx::Class, MooseX::Storage, DBM::Deep rationale: Storm is an object-relational mapper specifically for Moose based objects. Storm attempts to be somewhere between KiokuDB and Fey::ORM. Storm is similar to Fey::ORM in that objects are stored in database tables - each table is mapped to a class and vice-versa. The difference is that Fey::ORM builds your classes for you based on your schema (from the database, or that you progam.) With this approach, you end up defining your classes attributes inside the DBMS. Finding this disjointed approach unsavory, I choose to make Storm free from requiring a schema. (Future version will allow you to supply one if desired). Storm can actually build a schema for you by introspecting your model and type definitions that you supply. Storm is similar to KiokuDB in how it manages caching, circular references and garbage collection by employing the use of $scope variables to track live objects. KiokuDB differs from Storm in may ways - KiokuDB is for storing any arbitrary object, supports many backends - DBI being just one of them. However KiokuDB stores all its objects in a single database table as JSPON entries, which makes it difficult to browse the data using conventional methods. It also make it hard to select specific objects from the database based on specific criteria (because the objects must be inflated in order to access their data - you can use a DBI backend and setup columns for the variables you want to be able to search by - but this has it's drawbacks ). Also, if you use KiokuDB to store your objects, you cannot (easily) access them through other methods - you have to use KiokuDB. This might be unwanted behavior if other applications want to access the data but don't use KiokuDB (especially programs not written in perl). Storm, stores it's objects in regular database tables. So other programs that don't use storm, even if they aren't written in Perl can still access and manipulate the data. You can easily migrate a legacy database to a storm application, without modifying your database structure in any way. There are a few tradeoffs between KiokuDB's approach and Storm's approach. KiokuDB solved a lot of issues that plague most ORM libraries (inheritence, ability to serialize any object), but did so at the cost of sacrificing compatibility with other programs/programming methods and the ability to search (easily). Storm accepts the limitations of most ORM's in order to provide data transparency and compatibility with applications already using conventional database structures. enteredby: JHALLOCK (Jeffrey Ray Hallock) enteredon: Sat Nov 20 18:39:36 2010 GMT The resulting entry would be: Storm adpOp Object-relational mapping JHALLOCK Thanks for registering, -- The PAUSE PS: The following links are only valid for module list maintainers: Registration form with editing capabilities: https://pause.perl.org/pause/authenquery?ACTION=add_mod&USERID=53400000_bed955fb2da8d821&SUBMIT_pause99_add_mod_preview=1 Immediate (one click) registration: https://pause.perl.org/pause/authenquery?ACTION=add_mod&USERID=53400000_bed955fb2da8d821&SUBMIT_pause99_add_mod_insertit=1 Peek at the current permissions: https://pause.perl.org/pause/authenquery?pause99_peek_perms_by=me&pause99_peek_perms_query=Storm