Hi,
I have dabbled a bit with both AWS SimpleDB and the sdb library as well as with the similar Google App Engine Datastore and related Clojure libraries. These two parts are indeed no-brainers: - Support for consistent reads - Support for literal string queries Re: numeric formatting I am not too familiar with the details of numeric types in SimpleDB and Clojure 1.3. Congruence between the two through usage of longs and integers sounds good. Re: type indicators in attribute values Indeed this gives some troubles when using literal string queries or using different tools and languages. The suggested move to storing type indicators in the attribute names instead of values would improve the usability of literal string queries and the "LIKE" construct. Below is another suggestion. Re: suggestion to be able to customize how the library should serialize and deserialize values I have used two clojure libraries with the Google App Engine Datastore that provide such functionality. Both libraries need an explicit definition of an entity. They also allow the specification of a serialization and deserialization function per attribute, for instance with appengine-clj: (ds/defentity Link () ((url :key identity) (title) (points) (date :serialize joda->javadate :deserialize java->jodadate))) The two libraries are: appengine-clj [https://github.com/r0man/appengine-clj/] clj-gae-datastore [https://github.com/smartrevolution/clj-gae- datastore] (Note that the often mentioned appengine-magic has no support for defining how values should be serialized and deserialized in the datastore) To talk in terms of entities is perhaps too much structure for the simpledb. I would suggest a way to define serialization and deserialization per attribute per domain in code. This would mean that there is no encoding of the type of an attribute in its name or value in the storage. get-attr and put-attr take the domain as an argument, which can be used to lookup the proper serialization and deserialization function per attribute. This approach would do away with storing type information into simpledb. It is also possible to provide this functionality on top of the existing simpledb library or the library with the suggested improvements. Finally, a (get-attr "domain" "some-id") call returns a {:sdb/id "some- id"} map when there is no item with that id in the domain. This means that a get-attr result can always be used a base case to merge updates in, but I have also found cases where I would have preferred a nil result when the item doesn't exist. I would prefer the nil returning case as this works nicely with if-let constructs. -Gijs -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en