The Environment: MonoRail, ActiveRecord, Windsor with AR Facility The Situation: I have one database schema and many databases built using that schema. A web application will dynamically figure out which one of those databases it is connecting to based on the URL, and will need to adjust the database connection string for that request prior to any controller processing. (The application is indifferent to which database it connects to, since they are all the same schema, just different data.) Multiple config files or base classes to handle multiple DBs is not possible, as the number of databases could change at any time (it's a very dynamic system).
This is an existing app that is being rewritten. It's a baseball game with a single huge (~190GB) database, and 98% of the data in that DB can be split at the "league" level (about 150 leagues). I'm thinking of switching from one big DB to many small DBs for better scaling and performance (at the expense of manageability). The Issue: What is the best way to handle this? I've searched for answers to this before, and have found a few different suggestions, so this post is as much a summary of those things as well as a call for suggestions on whether anything I've found so far is right, or if there are other solutions. Some of the suggestions I've found: 1. Use a custom NHibernate connection provider and inject the connection string based on the HttpContext. Side effect: This breaks the 2nd level cache, which I perhaps can live with. 2. Implement and manage multiple session factories using a solution such as http://www.codeproject.com/KB/aspnet/NHibernateMultipleDBs.aspx. 3. Use DifferentDatabaseScope in AR -- though comments have said that this isn't fully baked yet, this seems to do something similar as #1 above. 4. Wait for NHibernate.Shards to fully bake, and look to incorporate that. 5. Rely on SQL 2005's horizontal partitioning to avoid the multi-db problem and keep everything into a single DB. (Not really a solution based on my requirements, but it is an option.) I'd prefer not to abandon AR or the facility, though I would be willing to remove it and just use the NH facility if necessary. Any thoughts on the matter? At this point, it seems that a custom NH connection provider and no 2nd level cache seems most straight-forward and reliable. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Castle Project Users" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/castle-project-users?hl=en -~----------~----~----~----~------~----~------~--~---
