Scalability is a big issue. How scalable is a database based system ? Can it cope with increasing demand ? Will the website / system / whatever crash when increasing numbers of punters push increasing numbers of queries into your table ?
Excuse me for being an old cynic, but is this perchance an excuse for vendors to sell even more expensive databases to the customer ? Specialist database suppliers sometimes have products which are not nearly as fast or “scalable” as their salespersons like to pretend ( notice how I have carefully not used any names. Lawyers are generally unpleasant, pompous, self-regarding and extremely expensive. )
So, what to do ? Well, here’s a cheap and cheerful idea. ( Please let me know if any of you furiously disagree, and I will proceed to carefully consider and then ignore your comments. )
Storage space is dirt cheap these days. A basic web hosting deal can supply 150 GB to 200 GB or some other ridiculously huge amount of space, for less than the price of a dinner in an overpriced London eatery.
Duplicate your table and its content. Better still, clone it three, four or more times. Assuming you have users who login to access the data, sort them according to their ID number ( or whatever the unique identifier is ). Then, redirect them to table 1, table 2,table 3 etc according to their ID. Remember, every table is identical, with all the same field names, data etc. Only the table names differ. ID data is stored in a session object on login. So, on login :
<?php
session_start();
$ID = $_POST['ID'];
$ID = trim($ID);
$_SESSION['Id'] = $ID;
?>
or, something along those lines.
At the query processing stage, assuming you have between 200 and 300 unique users :
<?php
if ($_SESSION['Id'] < 101) {
$SearchQuery = “SELECT ID, foo, bar FROM table1 WHERE foo = \”par1\” ;
}
elseif ( ($_SESSION['Id'] > 100) && ($_SESSION['Id'] < 201)) {
$SearchQuery = “SELECT ID, foo, bar FROM table2 WHERE foo = \”par1\” ;
}
else {
$SearchQuery = “SELECT ID, foo, bar FROM table3 WHERE foo = \”par1\” ;
}
Then, continue as normal :
$link = mysql_connect(’localhost’, ‘username’, ‘password’) or die(’Could not connect: ‘ . mysql_error());
mysql_select_db(’database’) or die(’Could not select database’);
$result = mysql_query($SearchQuery) or die(’Search Query failed: ‘ . mysql_error());
etc.
Same query name, returns same result data from different tables. You are effectively spreading the load among different tables according to your users’ ID.
Simple.
Obviously all the above is done using php and MySQL. Nothing fancy or expensive.
BTW - I strongly recommend NavicatMySQL ( which I use - there may be similar products out there, that I don’t use………..).
Navicat is quite affordable and makes the tasks of manipulating MySQL tables, data, exporting, importing, dumping, type conversion etc a breeze.
Hope this helps delay the day when you need to fork out for a really expensive database system
PS Please don’t tell me that it won’t work for an “enterprise” level system.
Firstly – there are different sizes of enterprise,
secondly - I am perfectly aware of the bleedin’ obvious ( to quote Mr Basil Fawlty ),
thirdly - “enterprise” level systems routinely crash when a large number of users try to access them.
As any regular user of British government IT systems will tell you.

