[storm] some questions about Storm (from the perspective of Grok)
Jodok Batlogg
jodok at lovelysystems.com
Thu Mar 13 19:16:52 GMT 2008
hello martijn, gustavo - and all others :)
On 13.03.2008, at 17:20, Gustavo Niemeyer wrote:
> Hello Martijn,
>
>> Some background first:
> (...)
>> On the longer term, Storm is also be a candidate to become the
>> "default
>> story" for doing relational database integration with Grok. Grok is
> (...)
>
> We'll be delighted to see this happening.
that would be awesome.
we're about to release the lovely.nozodb as ZPL.
basically lovely.nozodb enables to run a zope3 application as wsgi
application without the need of a zodb storage and without zconfig.
the results (performance, stability) in combination with storm and
postgresql are really great.
>> Storm looks attractive as it looks smaller and simpler in use than
>> something like SQLAlchemy, while it still aims high in being easy to
>> integrate and having high performance features.
>>
>> Now as to my questions:
>>
>> Looking at Storm I noticed one thing that seems to be missing that
>> other
>> ORM tools for Python do seem to offer: a way to do table
>> definitions in
>> Python. Instead in the tutorial direct 'create table' statements are
>> used. I'd be interesting to hear whether this missing feature is
>> intentional, and if so, what the reasons behind this decision are.
>
> It was really designed this way. I'll try to explain shortly some
> of the reasons for it.
>
> It's important to understand, though, that I'm only explaining the
> choice. I'm sure automatic schema creation is interesting in a number
> of cases, and I'm not even against having some kind of support for
> that
> in the future, *if* we can come up with a system that won't affect the
> other design goals significantly.
>
> So, basically, we didn't want schema management mixed with the ORM
> for the following reasons:
>
> - Avoiding duplication. On all of the projects we need ORMs for, we
> have fine tuned schema creation and patching. Any schema management
> introduced in the ORM itself would be duplicating effort.
>
> - Centralization and transparency of schema management. All the
> objects
> created in our databases, and how they are created, is seen in a
> single
> place.
>
> - Flexibility. As much as the layer offered to create the schema is
> flexible, there are a number of uncommon options in schema
> management,
> many times dependent on the database itself, that are needed on
> serious
> projects (performance/behavior tweaking). We could, of course, try
> to
> implement every single option we needed on the schema layer, but
> besides
> this process being an unwanted burden, it also didn't make a lot of
> sense
> for us to be simply reinventing a different representation for the
> schema.
>
> - Separation of concerns. Not having to deal with schema management
> in
> the ORM makes it simpler, and more focused on its real goal.
+1
we at lovely systems don't believe in automatic sql schema generation
either.
>> Concerning Zope 3 integration, has anything been done by anyone about
>> integrating Storm's variable/property system with Zope 3 schemas? It
> (...)
>
> No, we haven't seen anything being done about it yet.
same here.
>> would be nice to be able to deduce a schema automatically for a
>> database-backed class (or perhaps the other way around), so one can
>> use
>> Zope 3's form system. I'd love to discuss this with others; perhaps
>> someone has already thought about this topic.
>
> That's an interesting point. Zope 3 interfaces are probably more
> suited to
> create the schema than the Storm class itself, since their goal is
> precisely to define rather than implement. I would guess that it's
> also
> quite easy to create the Storm properties automatically, if that was
> wanted.
yes that should be possible. however - i think the engineer should be
able to create the sql himself. i don't believe in sql autogeneration.
at least not for our use-cases.
i mean, if we are creating a optimized application we want to define
the database logic on our own. sql functions, indexes, triggers,...
>> Grok tries to follow DRY: don't repeat yourself. I can see Grok
>> integration with Storm to contain some (partial) repetitions:
>>
>> * define the table and its columns
>>
>> * define the class that represents this table (or more tables) as a
>> Python object
>>
>> * define a Zope 3 schema for the public properties of a class (so
>> edit
>> and add forms can be generated)
>>
>> It's clear that each of these repetitions exist because these are
>> different things: each serves a special purpose and having these be
>> separate can make the whole system more flexible - that's typically
>> the
>> reason there is repetition in Zope 3 components too. That doesn't
>> take
>> away that there is a lot of repetition here, and it's interesting to
>> think about ways to reduce this, perhaps by having a definition
>> system
>> that can do all three at once.
>
> I agree with all of these points.
yes - as you said. these things do different things. and yes - it
would be nice to have some simplification :)
but usually the application logic is much more work than the content
type / schema / python class definition.
jodok
>
>
> I'll be happy to discuss and try to participate somehow if you want
> to try something like that out.
>
> --
> Gustavo Niemeyer
> http://niemeyer.net
>
> --
> storm mailing list
> storm at lists.canonical.com
> Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/storm
--
"Beautiful is better than ugly."
-- The Zen of Python, by Tim Peters
Jodok Batlogg, Lovely Systems GmbH
Schmelzhütterstraße 26a, 6850 Dornbirn, Austria
mobile: +43 676 5683591, phone: +43 5572 908060
More information about the storm
mailing list