I'm just trying to once and for all find or implement a clojure solution for the simple problem that most companies (that make heaps of money developing super boring software) have: There's relational data like "Persons" and "Companies", that needs to be accessed and manipulated by multiple client programs concurrently.
But even today, where everyone working on that kind of problem should have seen frameworks like Ruby on Rails, there exist (especially in my current job) horrible homegrown "frameworks", where adding a simple new "business object" or making changes to an existing one is a serious pain in the neck. I've implemented different solutions to that problem myself for different companies using standard sql databases and languages like Java. None of these solutions was as bad as what I currently have to put up with, but none was perfect either and each one had their downside. Think about (de)serialization, caching, high availability (failover primary/backup) and so forth - all of these layers are hand-written with custom code for every single business object in my current company. And if this is the core of the system, you can imagine how all the code that uses it looks like. It's inconsistent and very brittle (concurrency). That said, I have already implemented an in-memory database system in clojure which is consistent (constraints) and allows to you to listen for modifications, but it's my first attempt of something like this in Clojure and therefore highly un-idiomatic, not clean and well- structured (namespaces) and for all those reasons hard to maintain. But now that I have something that actually works, I plan to completely rewrite it from scratch in a cleaner way. But I want to get some things clear first to see whether I'm going the right way. One other thing that I want to do in that rewrite is define (or reuse) languages for querying, manipulating and defining the schema and constraints. Currently for example I accept any clojure function with one argument for the check constraints. I want to restrict that to a well-defined set of functions/operations that can be arbitrarily combined. One reason I want to this is so that I can persist all modifications to disk (and thus make it durable), in a descriptive format that is clojure-independent. If these function can be arbitrary clojure code god knows what problems I'm inviting - non-pure code, making the persistence files depend on a certain version of clojure and so forth. But if in the meantime someone pops up in the group saying that they implemented a system similar to the one described in "Functional Relational Programming", I'll probably immediately dump my code and just use that... :) On Jul 1, 9:18 pm, Matt Culbreth <mattculbr...@gmail.com> wrote: > On Jul 1, 8:02 am, Rowdy Rednose <rowdy.redn...@gmx.net> wrote: > > > > > But it looks like I have to implement that myself - which is not a > > complaint, but I'm trying to estimate the amount of work necessary. > > But I guess I could just start with one Ref per relation and then make > > it more concurrent later - if I choose an interface that allows it. > > This looks like a cool project--please keep us updated if you actually > begin it. I'm sure others wouldn't mind helping. --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---