There are certain things you must be very careful of when you build your website. Performance of the website is a major factor in its success. This guide will give you a technical overview of your server performance. In this guide I am only concentrating on Linux environment as
1. It is cheaper.
2. It supports the fastest script engine PHP.
3. It has the default MySQL database.
4. Its web server is apache, which can be configured with less effort and
5. The Linux environment is most popular.
Before I begin, I must explain what makes a website performs rock solid. As you are aware in most of the websites database is a key factor which mainly stores and fetches data. A portal with slow database execution takes long time to execute and that can take away most of the visitors. If your portal accepts payment then security is the next thing, you shall be concerned of. So, my article will mainly revolve with these two features and a bit of other key areas which you would like to give focus on.
Hardware: This is the factor you must take seriously depending upon the kind of business you are doing and the number of visitors you are drawing. The hardware peripherals which affect the performance are mainly RAM and your CPU speed. RAM is a space which stores data temporarily for CPU access. But if your CPU cannot process faster, then transferring more data into the RAM area will not solve the problem, since the data will remain unprocessed. A better system is a balanced system and increasing just one parameter will never go to improve speed.
MySQL: Database is the most important parameter in
terms of server performance. If I classify what makes a slow database
or rather what you can do to improve data seek speed, then we get 1.
Database design
2. Query standard and
3. Configuration as the primarily responsible reasons.
Database design: MySQL allows you to define data type definition in wide varieties. And you must use them optimally. Declaring the data type of a field as int(11) will unnecessarily eat up space, if the field stores value between 0 and 10. Remember, a good bridge is one which is has better architecture. Mere using good materials never build a good bridge. Here are a few guidelines.
A. For numeric value, guess
what maximum value it might store and then select between tiny int,
small int, medium int and int. Fields which you know will never store
negative numbers should be unsigned.
B. For alphanumeric characters
it is wise to select variable length than fixed length as variable
length can adjust memory space depending upon size of data stored.
C. Normalize the table as much as possible. This decreases the chance
of data redundancy. Also as tables get broken up, memory space usage
decreases.
D. Proper indexing is the key for better search result. Index your
table wisely and pragmatically. If you think, your table will be
searched more on employee name than on employee code, create index
based on employee name. Mysql arranges data based on available indexes,
so search based on index results faster performance.
Query Standard: The fast data retrieval depends on the query you write. Here are a few tips on that.
A.
Join query is always better than multiple nested queries. So try to use
join queries if more than one table are involved in search.
B. Avoid Select statement.
C. Try to test queries by writing them in alternate ways.
Server configuration is the last thing we can do to better the performance. Here are the important settings which affect the performance.
A.
Key_buffer_size: This is the most important settings. The larger you
set its value, the more MYISAM indexes store in memory. As most queries
use indexes as search factor, memory plays better role than disk. The
ideal settings is 25% of server memory but less than 50%, for improved
performance.
B. The table cache: When mysql access a table, it
places it in the cache. So increasing cache size plays an important
role. So if you are accessing three tables, mysql opens three tables in
the cache. Its default value is 64, but you must set it accordingly
depending upon performance. An optimized one, not too high, not too low.
C. Sort_buffer: If you are sorting huge table then you must set its value high.
D. Read_rnd_buffer_size: The read_rnd_buffer_size is used after sort
when rows are read in sorted order. If you are using many queries which
use order by clause, increasing this value will help improve
performance.
E. Query cache: first you must on query cache by setting
query-cache-type=1 and query-cache-size can ideally be around 15-20 MB.
F. Tmp_table_size: This variable set the maximum size for a temporary
table in memory. You must try avoiding temporary table by optimizing
query. If the table becomes two large, MySQL creates a MyISAM table
instead. Upping this value helps in speed, if temporary table size gets
increased.
I would not discuss much on security issues rather would try to discuss it separately. But as an introduction SQL injection, Cross Side Scripting and HTTP trace are the most important security threat one website can get. SQL injection is a threat which exposes table name and data when a purposely built query is passed to the database through any web form. Basically when user input is incorrectly filtered for string literal escape characters. If we consider the below SQL statement Select from employees where emp_name= EmployeeName Now if the user input EmployeeName has any inside it, mysql cannot escape the string literal and exposes error.
Similarly if purportedly written javascript is passed through user input, Cross Side Scripting or XSS attack happens. This client side script can take charge of the website through hole exposed by the weekly programmed website code. I would like to discuss more with security issues. Till then happy reading!!