With Google's announcement of support for Java in their App Engine,
Persevere now has the potential to run on GAE. I have reviewed the GAE
docs, and it doesn't look like there would be any serious problems with
running Persevere. However, GAE does prevent file write access, so
Persevere's default storage engine could not run, but within the context
GAE, I would think it would be preferable to use Google's provided data
store anyway (the BigTable database). Therefore, the main effort that
would be required would be writing a data source adapter for Google's
data store API for their database. The BigTable database would actually
fit very nicely with Persevere, since I believe it supports very dynamic
table structures with expando properties on objects. One would probably
be able to retain pretty comprehensive support for Persevere's broad
range of persistence capabilities on GAE.
Support for GAE is therefore something I would really like to see added
to Persevere. Besides noting that this is on the roadmap, I also wanted
to see if anyone was interested in working on this. Creating data source
adapters is a relatively self-contained project (in comparison to other
feature additions), so it might be a reasonable, fun project. If not, I
do still plan on adding support for GAE, albeit it will probably remain
lower priority than bug fixes/stabilization, and some of the more
immediate efforts.
Thanks,
--
Kris Zyp
SitePen
(503) 806-1841
http://sitepen.com
I'd like to contribute to that as well (as time permits).
Already did something actually pretty similar for Helma NG, i.e., a
Rhino JS layer wrapping Hibernate API for convenient use. [1]
[1] http://dev.helma.org/ng/Persistence+API
-- Robert T.
That being said, such an endeavor is certainly non-trivial. The surface
area between JS persistence mapping mechanism and the database is
actually pretty large, and making interoperable API maybe very difficult
with the different architectures out there, I am not sure.
> I'd like to contribute to that as well (as time permits).
> Already did something actually pretty similar for Helma NG, i.e., a
> Rhino JS layer wrapping Hibernate API for convenient use. [1]
>
> [1] http://dev.helma.org/ng/Persistence+API
>
>
Very cool, sounds great.
Kris
So maybe we want a low-level database API and higher-level datastore
API? Or maybe what I am doing in Persevere is such completely different
architecture from what others are doing that there would not be any
benefit (at least yet) from standardizing a higher-level API that would
permit transparently interchangeable datastores (like swapping BigTable
for MySQL or JavaScriptDB with rewriting application code).
Thanks,
Kris
I don't see where this does any abstraction of google's query mechanism.
Wouldn't applications still need to write GAE-specific queries? Maybe
you were aiming for a lower-level API...
Kris
Yeah, I didn't think that was your goal, and I certainly don't think
everyone needs to do that. But this is an important functionality that
Persevere provides, so that RESTful queries can be made directly in URLs
and safely converted to the appropriate low-level storage API. So in
terms of truly interoperable data stores that can be swapped out with
other data stores, Persevere requires this type of higher-level API.
> I found your account of the unified query approach in Persevere quite
> interesting. Analyzing the AST tree of a function and mapping it on a
> native db query is a good approach for backends that have powerful
> query functionality. Maybe for Google datastore the CouchDB approach
> to actually evaluate the function on the data and store the result in
> an incremental index would be an interesting option.
>
>
Surely GAE's BigTable already has indexes though doesn't it? This is one
of the big reasons why I avoided having Persevere use CouchDB's
view-server style of indexing. Most storage engines/databases already
provide indexing. Doing indexing (possible again) at a higher level in
the application is extremely inefficient compared to doing indexing
directly at the storage level. This is why CouchDB generally is not very
competitive with traditional databases when it comes to performance,
whereas Persevere can leverage storage-level indexing performance.
Kris