I'm searching at spinning a VB according to-premise (in your area installed) application (invoicing+inventory) as an internet based Clojure application for small enterprise clients. I'm planning this to become offered like a SaaS application for clients in similar trade.

I had been searching at database options: My choice was an RDBMS: Postgresql/ MySQL. I would scale as much as 400 customers within the newbie, with typically a 20-40 page sights/ daily per user - mostly for transactions not static sights. Each view calls for fetch data increase data. Acidity compliance is essential(approximately I believe). Therefore the transaction volume isn't huge.

It will be a no-brainer to choose either of those according to my preference, however for that one requirement, that we believe is normal of the SaaS application: The Schema is going to be altering when i increase the clients/customers as well as for each customer's altering business requirement (I'll be offering some limited versatility only to begin with). Like me not really a DB expert, according to things i can think about and it has read, I'm able to handle that in many ways:

  1. Possess a traditional RDBMS schema design in MySQl/Postgresql having a single DB hosting multiple tenants. And add enough "free-floating" posts in every table to permit future changes when i increase the clients or changes to have an existing customer. This may possess a problem with propagating the alterations towards the DB whenever a small change is built to the Schema. I recall reading through that in Postgresql schema updates can be achieved real-time without securing. Although not sure, how painful or how practical could it be within this use situation. As well as, because the schema changes may also introduce new/ minor SQL changes too.
  2. Come with an RDBMS, but design the database schema inside a flexible manner: having a near to entity-attribute-value or simply like a key-value store. (Workday, FriendFeed for instance)
  3. Possess the entire factor in-memory as objects and store them in log files periodically.(e.g., edval, lmax)
  4. Get a NoSQL DB like MongoDB or Redis. But according to things i can gather, they aren't appropriate with this use-situation and never fully Acidity compliant.
  5. Choose some NewSQL Dbs like VoltDb or JustoneDb(cloud based) which support the SQL and Acidity compliant behavior and therefore are "new-gen" RDBMS.
  6. I checked out neo4j(graphdb), although not confident that which will fit this use-situation

During my use situation, a lot more than scalability or distributed computing, I'm searching at an easy method to attain "Versatility in Schema + Acidity + some reasonable Performance". The majority of the articles I possibly could find around the internet talk about versatility in schema like a cause resulting in performance(within the situation of NoSQL DBs) and scalability while departing the Acidity/Transactions side.

Is an "either or" situation of 'Schema versatility versus ACID' transactions or It is possible to better way to avoid it?