tags:

views:

109

answers:

4

hi,

We are planning to create a web app to store banking transactions for customers, e.g purchases, transfers etc and allow them to tag / categorize each transaction.

Could someone point us to the best DB for this purpose? It needs to scale horizontally and we also need to perform analysis on all transactions.

Thanks

+3  A: 

The best database to store banking transactions is the one the banks use, DB2/z.

But, since I doubt you'd be able to afford a System z mainframe, that's probably not an option. That doesn't make it any less the best database of course.

If, however, you're talking about storing transaction for Joe Bloggs or Dodgy Brothers Rug Emporium (as opposed to the two hundred million or so customers of ICBC), pretty well any database will be up to the task - Oracle (despite its inability to differentiate NULLs from empty strings), SQL Server, MySQL PostgreSQL, even SQLite probably.

paxdiablo
lol @ "despite its inability to differentiate NULLs from empty strings" - made me laugh out loud!
Mitch Wheat
I never miss an opportunity to take a jab at that. If only the other DBMS vendors would pay me for an astroturfing campaign, I'd be a lot better off financially :-)
paxdiablo
While you dont' get the safety of a mainframe, don't forget that DB2 is available on other platforms as well - and the "free" version has less limits than the free versions from Oracle/MS-SQL.
nos
Well, yes, admittedly it's no so much the database that gives you the grunt so much as the massive parallelism and insane levels of I/O offloading in the platform. And the safety comes from impressive redundancies and autonomic behaviour. So, other than that, yes DB2/z and DB2/LUW are pretty much similar. You can certainly learn DB2 with the LUW product.
paxdiablo
Thanks. What about horizontal scalability for the databases that you've just mentioned? Oracle and DB2 is definitely out of the picture due to the cost. How about MongoDB or any NoSQL databases? The storage is for banking customers but it's not crucial and doesn't require atomicity.
Stewart
A: 

I can't see you have much choice?

The main players are;

  1. Oracle
  2. SQL Server
  3. MySQL
  4. Postgres

Oracle is bundles of money.

I have no experience of MS SQL.

mySQL isn't good at threading, may be on the way out because of its purchase by Oracle, it's nightmare to get replication going, but has the widest user base.

Postgres is good at threading, has a smaller user base. No idea what it's like at replication.

In terms of performance, they're all much of muchness, really.

Blank Xavier
you forgot SQL Server
Mitch Wheat
"mySQL isn't good at threading" - could you qualify that? Facebook uses MySQL, and ummm..., has a lot of users....
Mitch Wheat
I down voted because you created an apparent authoritative list of main players that included mySQL (MySQL btw) but neglected to include MS SQL.
Michael Shimmins
@Mitch: mysql only supports blocking queries - you need one thread per concurrent query.
Blank Xavier
@Michael: good point and appropriate edit performed.
Blank Xavier
@Blank Xavier : do you have a reference/link for that info?
Mitch Wheat
Not offhand. Check the mySQL C API; you'll find (after searching for a while, because it isn't positively stated that you can't do this) there's no way to issue a non-blocking query or to cancel a query. Then check the Postgres API; you'll see it supports non-blocking queries, with a callback on completion.
Blank Xavier
@Blank Xavier - downvote un-downvoted :)
Michael Shimmins
@Michael: good show! :-)
Blank Xavier
+1  A: 

I'm going to start this by saying its almost impossible to recommend a system based on what you've described. It could be for such a varied number of uses, ranging from mission critical real time financial data that needs to be there and needs to be accurate, through to a web app that sucks in financial records from a bank/credit card statement and lets the user annotate them, in which case it isn't as sensitive.

If you're storing mission critical, sensitive data, I'd go with a commercial option that includes significant support. Also a DBA would be a good idea.

Oracle or MS SQL would be my inclination, and probably Oracle over MS SQL, over because of its multi-platform support. If you're happy to run on Windows then MS SQL is fine.

If you're storing existing transactions that can be tagged (ala Blippy), then any database would be sufficient. If you're thinking of scaling this out to the n'th degree, you might like one of the document database flavours of the month, (MongoDB, Couch etc).

Really I think the question should be reconsidered from the context of what your application will do, not that it happens to do it with financial data. The fact that financial data may require additional security, or additional accuracy checks, that forms part of what the system will do, as does the way the user interacts with your web app etc.

Michael Shimmins
+1 for 'Also a DBA would be a good idea.' :D
Rich
hi Michael, sorry for not being so clear on the requirements. Yes, it isn't sensitive. I have thought of MongoDB but am worried about the performance especially when i need to analyze all the transactions from all users. User owns Transactions . Query each user, get the transactions and analyze ALL transactions. What do you think? If you compare it to SQL db, all the transactions is within a single table. Very easy to analyze ALL transactions.
Stewart
+1  A: 

This may not answer your question directly, but here is what I have experienced.

I think, its really about how you'd save your banking transactions. Most database vendors provide sufficient amount of database performance, so all you have to do is to choose one over other.

What you are left with is the actual information to be saved(besides schema). You might think about using database encryption option, but then its not really realistic in your case; because you are talking about transactions, I assume there are quite alot of transactions coming in, and you doing large of amount of reads for your reporting(besides write), possibly for mining, etc.

Usually(sql server), using encryption any data that is written into the database file is encrypted. Snapshots and backups are also use encryption. The transaction log is also protected, so it would hit the performance that you might desire.

So, I see your question really boiling down to How to protect sensitive data?

Here are couple of articles that might help:

Btw, I have deployed solutions with Oracle, SQL Server, and even Sybase as backends, with several transactions pouring in from ATMs, and what I really look for is the performance, besides security. Except for minute limitations of one over other, all are same.

Following articles might help:

Database security: protecting sensitive and critical information Using One-Way Functions to Protect Sensitive Information in SQL Server Databases

KMan