This makes me wonder if it would make sense to create a Postgresql plugin that adds a keyword type and other similar types, that would allow for a more precise roundtrip between Clojure and Postgres.
Jason On Sat, Aug 23, 2014 at 11:23 AM, Thomas Heller <th.hel...@gmail.com> wrote: > Hey Kyle, > > thanks for the Feedback. Appreciate it. > > I think you misunderstood the meaning of a "type" in shadow-psql. A "type" > is merely the format of how a given value is represented on the wire since > the backend needs to understand what we send it. Postgres supports 2 > different Wire Formats: Text and Binary. While Text is considered the > "default", binary is usually a lot more efficient. pgjdbc for example only > supports the text format. I try to be binary first, which works for most > types so far. (Numeric is giving me trouble, but I'll eventually figure that > out). I allow overwriting the "types" cause not everything I store in > postgres is understood by it (EDN, Keywords, ...). By hooking directly into > the encode/decode code I can efficiently do the transformation on-the-fly. > In my completely unscientific preliminary benchmark I cut the query time > from pgjdbc 650ms to shadow-pgsql 200ms and that is for very simple types > (50k rows) with no optimizations done yet. I expect the difference to be > much larger if you use a timestamp, timestamptz or bytea for example, as the > text format for those types carries a bit more overhead. But once everything > is stable I will do some real benchmarks. Better performance was not the > reason I wrote this, just a pleasant side-effect. > > As for the amount of work: its pretty much done. Some more exotic features > need to be implemented, but those were never available via JDBC anyways (eg. > COPY). I think its stable enough that I will begin moving my projects > "soon", when I release everything to production I'll probably release a > 1.0.0-RC. shadow-pgsql can not be layered on top of JDBC, well technically > thats what I did for the last 2 years > (https://gist.github.com/thheller/de7ecce0db58130ae6b7) BUT it required some > ugly reflection calls since the PGJDBC does not expose all the information I > needed. In the end I decided that I'd feel better to rewrite everything from > scratch as the documentation is quite good and the protocol is simple. > > Since the non-Java world does just fine without JDBC, I think we can do too. > ;) Also, the "Illusion" JDBC provides that you can just switch databases if > you feel like it only holds until you start using postgres-specific > features. Not all databases have arrays, hstore or json types. > > Regards, > /thomas > > > On Saturday, August 23, 2014 5:12:30 PM UTC+2, Kyle Cordes wrote: >> >> On Thursday, August 21, 2014 at 1:00 PM, Thomas Heller wrote: >> > Hey Clojure Folk, >> > >> > I'm close to releasing the first alpha version of >> > https://github.com/thheller/shadow-pgsql a "native" interface to PostgreSQL >> > I wrote. >> > >> > Its an implementation of the native binary protocol without any intent >> > to ever support JDBC. Mostly because that provides a bunch of features I >> > never use, but no support for features I wanted. It is mostly Java but I >> > will probably only use it from Clojure so that is my primary goal going >> > forward. I think the Java bits are close to stable. >> > >> > I'm looking for interested beta testers and feedback. I'm bad at writing >> > docs cause I never know where to start since there are so many features and >> > differences to JDBC. >> > >> >> >> As a user of both Postgres and Clojure, I find this very interesting. It’s >> helps with a couple of pain points around JDBC, such the fact that any >> nonstandard feature ends up hidden behind a untyped interface passing >> strings around. But I also have a couple of bits of feedback that are a >> little more skeptical: >> >> First, the amount of work it will take to get this to a complete enough >> state that large projects could safely switch to it, could be substantial. >> It makes me wonder if, instead, this could be built as a layer up on top of >> the Postgres JDBC driver. This would not be as elegant because it would not >> strip out as much unnecessary code, but it may be quite a lot less work. >> >> Second, it seems to most effectively target people who are both very type >> oriented, yet are using Java or Clojure. It seems to me that folks who are >> so concerned with types that they would step away from the standard way of >> talking to databases generically, might be found over in the community of >> people using more rigidly typed languages like Haskell etc. >> >> Third, although I like the idea of leveraging the features of the tool you >> are using (like Postgres), at the same time experiences taught me that, the >> more firmly a project seems destined to never switch to a different brand of >> database, the more likely some future unexpected opportunity will come up >> where that is exactly what is needed. I suppose this is just Murphy’s Law. >> >> I don’t want to sound discouraging though, I really like this idea. >> >> -- >> Kyle Cordes >> http://kylecordes.com >> >> >> > -- > 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 > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. -- 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 --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.