Maximum MySQL Database Size?

While developing myScoop, and other experimental projects, I have been thinking about the limitations of a MySQL database, particularly it’s maximum file size. I was amazed that after some research I really have absolutely nothing to worry about. It seems my 112mb database is a “new born baby” in the terms of how big it can still grow.

MySQL LogoWhile developing myScoop, and other experimental projects, I have been thinking about the limitations of a MySQL database, particularly it’s maximum file size. I was amazed that after some research I really have absolutely nothing to worry about. It seems my 112mb database is a “new born baby” in the terms of how big it can still grow. Here are the estimated maximum file sizes per operating system:

Operating System File-size Limit
Win32 w/ FAT/FAT32 2GB/4GB
Win32 w/ NTFS 2TB (possibly larger)
Linux 2.2-Intel 32-bit 2GB (LFS: 4GB)
Linux 2.4+ (using ext3 file system) 4TB
Solaris 9/10 16TB
MacOS X w/ HFS+ 2TB
NetWare w/NSS file system 8TB

This information was taken directly off MySQL.com but this is not necessarily the maximum limitations of your database. A number of methods can help to increase your max file size:

LFS (Large File Support) in Linux
To support files larger than 2GiB on 32-bit Linux systems you would have to use LFS. Although I’m sure the latest operating systems would come out with this already enabled. The standard max file size limitations without LFS enabled are 2^31 bytes(2GiB), but enabling LFS can enable your maximum file size to reach 2^63 bytes (9 223 372 036 854 775 808 bytes). Crazy, I know!

Using the “Alter Table” command
This will come in handy when using the MyISAM storage engine. The simple “Alter Table” in the mysql prompt command can extend your database capacity dramatically.
Example: “alter table ‘weather’ max_rows = 200000000000”
Although keep in mind, the maximum amount of rows in a MySQL table can only be 4.2billion (not so good if you’re thinking of making a search engine!)

Most of this researched information is very old so I decided to run a little check (which I should have done right in the beginning), and by doing so on my local machine, I literally nearly fell of my chair:

mysql> show table status like ‘blog_hits’ \G
*************************** 1. row ***************************
Name: blog_hits
Engine: MyISAM
Version: 10
Row_format: Dynamic
Rows: 15497
Avg_row_length: 247
Data_length: 3835852
Max_data_length: 281474976710655
Index_length: 366592
Data_free: 0
Auto_increment: 15509
Create_time: 2009-11-24 16:53:38
Update_time: 2009-11-24 16:53:38
Check_time: 2009-11-24 16:53:38
Collation: latin1_swedish_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)

This is telling me my max database size can be as much as 281474976710655 bytes which If I’m not mistaken, equates to 256 terabytes. With this being said, I think we are going to run into system limitations rather than MySQL limitations, so therefore, revert back to the table at the top of this post.

For more information on this topic,  Kristian Köhntopp provides more of a technical answer to the above question.

6 Essential WordPress Plugins

WordPress is arguably one of the most powerful and easy to use content management systems out on the free market today, which gives host to a huge array of downloadable plugins to improve the interactivity of your blog and overall satisfaction of your readers. Although keep in mind, some of the most powerful and useful plugins are those that your readers will never even get to see.

WordPress is arguably one of the most powerful and easy to use content management systems out on the free market today, which gives host to a huge array of downloadable plugins to improve the interactivity of your blog and overall satisfaction of your readers. Although keep in mind, some of the most powerful and useful plugins are those that your readers will never even get to see.

I have listed 6 of the most essential plugins that I feel no blog should be without.

Akismet
This is THE most essential plugin you will ever require. This extremely handy plugin eliminates 99.9% of spam comments that your blog will undoubtedly receive. Akismet comes standard with every WordPress installation but to make use of its features you need to register an account at WordPress.com and insert your API key into the Akismet control panel.

Google Analytics
This plugin is one of the easiest plugins to handle and does the simple yet essential task of inserting your Google Analytics code into every one of your pages and articles on your blog.
http://wordpress.org/extend/plugins/google-analytics-for-wordpress/

XML Sitemaps
I would have to say this is one of the most essential plugins you could carry in your handy blogging toolbox. This automatically generates an updated and optimised sitemap and pings Google and all other relevant search engines of the changes made. This keeps the search engines coming back to your site to update their information.
http://wordpress.org/extend/plugins/google-sitemap-generator/

Wibiya
This is one of my favourite WordPress plugins. Wibiya is a toolbar that sits firmly at the bottom of your blog that boasts functionality such a search function for your blog, Twitter integration, Facebook integration, games, translation, and the ability to display notifications to your users. To get this amazing WordPress plugin you need to request an invitation from Wibiya themselves by simply going to their website and filling in a few details. I got my invitation in less than 24 hours and it took me a couple of minutes to set it up.
http://www.wibiya.com/

Gravatar
People like seeing pictures of themselves when they post a comment to an article. An excellent and popular way of doing this is by using Gravatar. It connects to the following avatar websites: Gravatars, OpenAvatar, Wavatar, Identicon, monsterID and MyBlogLog.
http://wordpress.org/extend/plugins/wp-gravatar/

Platinum SEO Pack
Nothing beats a seasoned SEO consultant when it comes to optimising your site, but the Platinum SEO pack does an excellent job. Install this plugin to ensure your blog stays ahead of the pack in the search engine results pages.
http://wordpress.org/extend/plugins/platinum-seo-pack/

myScoop: Updates 20-11-09

I spent a few hours last night making a few changes to myScoop. Yeah I know last night was a Friday night but sometimes sacrifices need to be made in order to grow.

I spent a few hours last night making a few changes to myScoop. Yeah I know last night was a Friday night but sometimes sacrifices need to be made in order to grow.

Auto-Tweeting new articles
Once a new article has been fetched, a shortened URI will be assigned to the article and the script will now automatically send the Title (shortened to 90 characters) and the shortened URI which redirects straight to your article. This method is similar to the Bookmarking section which sends the title, shortened URI and the first tag in a hash tagged format.

mySccop posting to Twitter
myScoop => Twitter

Blog Stats (Graph)
Each user that submits their blog to myScoop and uses the tracking code associated with that blog has the ability to track unique visitors. This is a LIVE measurement and shows unique visitors per day for the past week. See below.

myScoop Blog Stats
myScoop Blog Stats

Other minor changes
I have added the category drop down list to the page where users submit new blogs to myScoop.

As new features get added, so do new bugs. Please let me know if you find any either by emailing me or simply posting a comment to this article. Thanks again for all your feedback, it is much appreciated.

PHP Header Include – Saving development time

I have had the opportunity to go through a lot of other developers coding skills and practices in the past few months and I must admit there is a lot of time wasting going on. Are you the type of developer that has a <title>, <meta>, <link> and <body> tag on every page without a global include? If so, let me show you how to simplify your life.

I have had the opportunity to go through a lot of other developers coding skills and practices in the past few months and I must admit there is a lot of time wasting going on. Are you the type of developer that has a <title>, <meta>, <link> and <body> tag on every page without a global include? If so, let me show you how to simplify your life.

By having a global header include you can set all your title tags in one central location as well as control which page gets what header information all in one file.

Firstly, create a file called header.php and use the below template:

header.php

<?php
	// Get the filename of the current page;
	$cpage = substr(strrchr($_SERVER['PHP_SELF'], "/"), 1);
 
	// set this to a "default" title as a backup incase you forget to mention a page. This stops it from returning nothing.
	$wtitle = "My Default Website Title";
 
	// Control page titles
	switch ($cpage) {
		case "index.php": $wtitle = "Home page title"; break;
		case "contact_us.php": $wtitle = "Contact us"; break;
		case "products.php": $wtitle = "Products Page"; break;
		case "about_us.php": $wtitle = "About us"; break;
	}
 
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head>
  	<title><?php echo $wtitle; ?></title>
  	<meta name="robots" content="index,follow,all" />
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 
	<link rel="stylesheet" href="css/style.css" type="text/css" />
	<?php
		// if you're on the products page, load the products.css file.
		if ($cpage == "products.php") { echo '<link rel="stylesheet" href="css/products.css" type="text/css" />'; }
	?>
</head>
 
 
<body>
 
 
<div id="wrapper">

Now you can start creating all your other pages and simply include the header.php file right at the top as follows:

index.php / contact_us.php / products.php / about_us.php

<?php include "header.php"; ?>
 
<div id="content">
<p>Content goes here</p>
</div>
 
<?php include "footer.php"; ?>

As you can see we have taken this one step further and also created a footer.php file. This comes in very handy when you need to put tracking code at the bottom of ever page. Instead of pasting it on every single file, simply paste it into the footer.php.

footer.php

</div>
 
</body>
</html>

I hope you find this as valuable as I do. If you do it differently please give us the details. After all, we all learn from each other.

myScoop – from concept to current and beyond

Every now and again I get this sudden urge to develop something that’s beyond my reach. Enter myScoop, my latest “lets-see-if-I-can-do-it” project. myScoop is essentially a combination of most of my PHP skills that I have learnt in the passed few months and when I started with the site it was originally supposed to be a social bookmarking tool, similar to that of Muti. I’m not 100% sure of when the focus shifted to blog aggregation. Either way, I’m pretty happy of the result.

myScoop Logo

Every now and again I get this sudden urge to develop something that’s beyond my reach. Enter myScoop, my latest “lets-see-if-I-can-do-it” project. myScoop is essentially a combination of most of my PHP skills that I have learnt in the passed few months and when I started with the site it was originally supposed to be a social bookmarking tool, similar to that of Muti. I’m not 100% sure of when the focus shifted to blog aggregation. Either way, I’m pretty happy of the result.

The first stage was nothing too advanced. I wanted users to be able to submit their favourite bookmarks and let my site crawl that page, retrieve the title tag and then retrieve the first paragraph of the blog/page. The user would then simply just select a category and throw in a couple of tags and press submit. The concept was easy enough and worked perfectly. myScoop would automatically assign you a shortened URL and go on to post that URL, Title, shortened description and the first tag to Twitter. Soon after that I got another bee in my bonnet and decided each submission needed its own stats page whereby a user can view how many hits it had received in the passed 30 minutes or hits per hour for the current day.

About a week later I launched the blog aggregation side of the site with the ability to add your own blog and follow other blogs. Again, the concept is simple enough; you would submit your blog address and the blog RSS feed location, and the site would crawl your RSS feed and fetch your article information. During this stage the site underwent a bit of a face lift with the help of Bonita who created the amazing myScoop logo and some great ideas from Bryan.

There are currently 2 articles discussing myScoop in fair detail:

There will be many more changes and upgrades to myScoop in the coming months. The only way myScoop is going to succeed is if it has functionality that is easy to use and understand. The only way I can get this accomplished is with the help of YOU. So im asking everyone that uses myScoop for all your ideas, comments and suggestions. Thanks for the support!