Hi Jeremy! in facts using JSON is more portable and indipendent from Ruby, I didn't thinked about because I consider Ruby "the only" languageI have to use :), but instead you are right!
About using JSON database-specific adapters, as that you mentioned, yes, I have to think about it. I read also that Sequel foresee "natively" interface for Postgres HSTORE/JSON/JSONB (great!), but the usage of this approach contraddict "portability" as you probably would say to me. I keep the occasion to thank you for your VAST work & vision in Sequel! respect giorgio Il giorno domenica 8 novembre 2015 01:58:55 UTC+1, Jeremy Evans ha scritto: > > On Saturday, November 7, 2015 at 10:01:34 AM UTC-8, Giorgio Robino wrote: >> >> I'd like to use a Sqlite3 database also as key/value storage (programming >> in Ruby). I want to use the sqlite3 database: >> >> - both in as usual way (relational tables managemen with sequel orm) >> >> - and also to have a table just to store that key/value storage (call it >> nosql if you like), where "value" is a free format [Ruby hash]( >> http://docs.ruby-lang.org/en/2.0.0/Hash.html). >> >> Imagine a sqlite3 table with two columns: >> >> chat_id | data >> ------------+------------------------------------------------------ >> 1276262 | { state: :add_item, list: ['2 pizze 4 Stagioni con >> peperoncino', '2 mezze minerali gassate] } >> 1276263 | { state: :new_address, address: '...', location: '..-' >> } >> 1276264 | { profile: '...', tastes: {...}, tags: [...] } >> ... | ... >> >> >> >> `data` column must contain a free format hash, varying from record to >> record with differents hash fields composition. >> >> Let say that I do not need to do any complex search inside the `data` >> column, but I only need to persist in the DB getting a record (load to RAM) >> and the putting back the record (dump to DB for persitence). **In the more >> performant way!**. Let consider the code: >> >> >> require 'sequel' # the great Sequel ( >> https://github.com/jeremyevans/sequel) ORM >> require 'sqlite3' # for accessing Sqlite3 (https://www.sqlite.org/) >> database >> >> DB = Sequel.connect('sqlite://chat.db') >> >> DB.create_table :sessions do >> string :chat_id, primary_key: true >> blob :data # case 2, see below >> # or text :data, case 1, see below >> end >> >> sessions = DB[:sessions] >> hash = { state: :add_item, list: ['2 pizze 4 Stagioni con >> peperoncino', '2 mezze minerali gassate] } >> >> >> >> >> Now focus on inserting some hash data in `sessions` table. A possible >> solutions in my mind to set the `data` column: >> >> 1. [JSON serialize](https://github.com/intridea/multi_json) to a `TEXT` >> type column ? >> >> sessions.insert(chat_id: id, data: Multi_json.dump(hash) >> >> >> >> 2. [Marshal serialize](http://ruby-doc.org/core-2.2.0/Marshal.html) in a >> `BLOB` type colum ? >> >> sessions.insert(chat_id: id, data: Sequel.blob(Marshal.dump(hash)) >> >> >> > If you are using SQLite 3.9+, you could look into using SQLite's native > json support: http://sqlite.org/json1.html > > Even if not, I would recommend the json approach, as it is easier to > interoperate with. Marshal format ties you to ruby. > > >> BTW: >> >> - I'm aware by the fact that Ruby Marshalling could be not portable data >> solution, but maybe more performant; isnt'it ? >> > > Marshalling is probably faster, but unless it is the bottleneck, don't > worry about it. There are fast json parsers for ruby. > > > Thanks, > Jeremy > -- You received this message because you are subscribed to the Google Groups "sequel-talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/sequel-talk. For more options, visit https://groups.google.com/d/optout.
