Sqlite is worth a look. Never used it with the JVM, but I assume there is a JDBC driver for it.
On Mon, May 27, 2013 at 1:01 AM, Zack Maril <thewitzb...@gmail.com> wrote: > Use postgres. If it makes sense later on, then try a nosql solution. Until > then, postgres will probably do 95% of what you want out of the box. > -Zack > > > On Sunday, May 26, 2013 6:20:02 PM UTC-4, Amirouche Boubekki wrote: >> >> >> 1) Is it structured aka. an object can have several fields possibly >>>> complex fields like list or hashmaps but also integers ? dates and uuids >>>> can be emulated with strings and integers >>>> 2) Do objects have relations ? a lot of relations ? >>>> 3) is the data schema fixed at compilation or do you need to have the >>>> schema to be dynamic ? >>>> >>> >>> Much of the data is conditional in a certain sense -- if it's an X, it's >>> also a Y and it may be a W or a Z as well, but if it's a G it's certainly >>> not a W, etc.; though simply storing a large number of boolean columns that >>> may be unused by many of the table rows would be acceptable. >>> >>> The thing that makes me slightly dubious about relational here is that >>> there will necessarily either be many columns unused by many rows, as >>> there's a lot of data that's N/A unless certain other conditions are met; >>> or else there will be many whole tables and a lot of expensive joins, as we >>> have a table of Foos, with an isBar? column with either a BarID or a null, >>> and a table of Bars with an isBaz? column, and a table of Bazzes with an >>> isQuux? column, and then a need to do joins on *all* of those tables to run >>> a query over a subset of Quuxes and have access to some Foo table columns >>> in the results. >>> >>> This sort of thing points towards an object database more than any other >>> sort, with inherited fields from superclasses, or a map database that >>> performs well with lots of null/missing keys in most of the maps. But maybe >>> a relational DB table with very many columns but relatively few used by any >>> given row would perform OK. >>> >> >> The only kind of object database that does ACID across documents on the >> JVM I know of is Tinkerpop' Blueprints. Blueprints is an abstraction layer >> on top of many graph databases among which Neo4j an OrientDB. The >> difference between a graph database and an object database is that >> «pointers» in a graph database are known at both ends. If you don't know >> graph you will need to learn a bit of it. Basicaly, if A is connected to B, >> B knows also about A being connected to it, which is not the case with a >> pointer. Otherwise said, like in relationnal database, you can ask for «all >> things connected to B» or «all things B connects to». The same query in an >> object database will cost more. On top of that it's schemaless, like an >> object database, but there is no notion of class, similar to what is found >> OO programming (even if you can model the graph to have the concept of >> classes). >> >> >>> >>> The DB must be able to grow larger then available RAM without crashing >>>>> the JVM and the seqs resulting from queries like the above will also need >>>>> to be able to get bigger than RAM. >>>>> >>>> >>>> >>>>> My own research suggests that H2 may be a good choice, but it's a >>>>> standard SQL/relational DB and I'm not 100% sure that fits well with the >>>>> type of data and querying noted above. Note though that not all querying >>>>> will take that form; there'll also be strings, uuids, dates, and other >>>>> such >>>>> field types and the need to query on these and to join on some of them; >>>>> also, to do less-than comparisons on dates. >>>>> >>>> >>>> Depending on your speed needs and the speed of the database, a kv store >>>> can be enough, you serialize the data as strings and deserialize it when >>>> you need to do computation. Except that kv store are not easy to deal with >>>> when you have complex queries, but again it depends on the query. >>>> >>> >>> I expect they'd also have problems with transactional integrity if, say, >>> there was a power cut during an update. Anything involving "serialize the >>> data as strings" sounds unsuited to either the volume I'm envisioning or >>> the need for consistency. It certainly wouldn't do to overwrite the file >>> with half of an updated version of itself and then lose power! Keeping the >>> previous version around as a .bak file is scarcely much better. It pretty >>> much needs to be ACID since there will need to be coordinated changes to >>> more than one bit of the data sometimes and having an update interrupted >>> with only half the changes done, and having it stay in that half-done >>> state, would potentially be disastrous. >>> >> >> At least unqlite is a embeddable kv store that is ACID across several >> keys, you won't have data cut in half (based on what is advertised), I >> think berkley db is also transactional. >> >> Also I'm interested only in opensource software so there might be >> proprietary softwares that solve you problem best, but I doubt that ;) >> > -- > -- > 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/groups/opt_out. > > > -- -- 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/groups/opt_out.