Designing real time database for financial organization

Hello Guys

I know this is basic and different people do that in different ways according to their needs; but I would like to know about the best practices to design a highly scalable real time enterprise databases for financial institutions.

When are we making transaction how the record is kept and tables are designed This is must not be basic ER solutions. Some experts thinks this must be blend of Transactional Database and analytical database (OLTP and OLAP). Whatever it it, the database must be designed to ensure a highly scalable,high performance and high throughput one.

Here is a sceniario. When millions of people are making transactions for their day-to-day saving accounts how the records are kept on the tables and how the tables are updated realtime. , when a transaction has been made their current balance is available at the next moment for next transaction or view., when a transaction has been made their current balance is available at the next moment for next transaction or view. I am thinking about thousands records per minutes. This is a solution for a financial industries so advance application features like page caching wont help me in this regards.

Reliability and scalability can be done both at the application software and hardware level. but improving a highly data-centric application performance is a challenge.

My objective is to know the best practices in software industries in tackling this issue.

Thanks for your co-operation in advance.

Regards

Tanvir

Email: shayer009@hotmail.com




Answer this question

Designing real time database for financial organization

  • Alessandro Camargo

    I do quite a bit of high-volume DB work as well so I understand where you're coming from.

    The two main things that I look for when designing a high-volume DB beyond separating OLTP and OLAP (that's a MUST), is horizontal partitioning and creating insert-only tables.

    If you can partition based on something like customer region, keeping that low-volatility data in-memory on your application servers, you're all set in terms of horizontal partitioning.

    Insert-only tables are a bit trickier to do. The idea is to change your data model in such a way that your high-volume transactions don't do updates, only inserts. In this way you decrease locking and contention which increases the number of threads that can hit the DB at the same time, thus increasing throughput and TPM (transactions per minute).

    One other thing that you might want to consider is moving the data files of those high volume tables to higher performing storage like possibly a flash disk.

    When combining all of these "optimizations", I've been able to get the high levels of throughput you mentioned - 10,000 TPM is not only achievable, but also not that expensive in terms of hardware.

    Let me know how this works out.

     



  • pyeung

    • Be dogmatic about creating normalized structures - 3NF.
    • Cautiously identify areas of denormalization only based on the needs of the business. Counts that are small ( < 1000) are generally not that expensive for a middle tier.
    • Leverage indexes ensure coverage
    • Stick to CRUD procedures with reasonable exceptions. In multi-user and multi-GUI scenarios do not couple stored procedures. In large organizations, it will not be long before you have a 100 procedures for a single table - creating contention.
    • Minimize explicit transactions - there will be scenarios you cannot get away from but you will find that you can write middle tiers to cope with DB issues and live with out them.
    • Minimize transactional foot prints to increase your transaction count. Do not support middle tiers to have object graph saves. Typically, information could be saved piece meal but developers need to understand this up front during design
    • Continue to optimize - regularly identify your longest running procedures and find ways to improve there performance.
    • Continue to optimize - regularly identify the procedures that run the most and find ways to improve there performance.
    • Separate OLTP from OLAP. Identify procedures that are basically used to fill a "report screen" Customer history screens etc are reports -- treat them like one.


  • drinkwater

    Hi Tanvir,

    In addition to what Udi and Keith said you can also consider using a tiered approach for the data caching changes (transactionally) on the applicaiton servers as well as the master database. The result of this may be that a user continueing from transaction to transaction will see the updates - however connecting again later she may not see them as the cahnge have not rippled from the backend to all the intermidiate caches - depending on you situation you may not be able to make this tradeoff

    Additionally you can take a look at in-memory databases - see for example TimesTen (http://www.oracle.com/database/timesten.html)

    If you have (relatively) simple objects you may also consider Jini based solution like http://www.gigaspaces.com/ (they support C# as well)

    Arnon



  • davco

    Hi Tanvir,

    not sure but possibly here, http://msdn2.microsoft.com/en-us/architecture/ms191149.aspx, is the guidance you are finding out



  • Designing real time database for financial organization