<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Weez.com</title>
	<atom:link href="http://www.weez.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.weez.com</link>
	<description>Solving everyday practical LAMP problems... one at a time</description>
	<lastBuildDate>Sat, 13 Mar 2010 20:10:37 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>EnterpriseDB Powers Sony Online Entertainment&#8217;s Widely Popular Online Game Free Realms(TM)</title>
		<link>http://www.weez.com/2010/03/enterprisedb-powers-sony-online-entertainments-widely-popular-online-game-free-realmstm/</link>
		<comments>http://www.weez.com/2010/03/enterprisedb-powers-sony-online-entertainments-widely-popular-online-game-free-realmstm/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 20:10:37 +0000</pubDate>
		<dc:creator>Abidoon</dc:creator>
				<category><![CDATA[Postgres]]></category>
		<category><![CDATA[EnterpriseDB]]></category>
		<category><![CDATA[Entertainment's]]></category>
		<category><![CDATA[Free]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[online]]></category>
		<category><![CDATA[Popular]]></category>
		<category><![CDATA[Powers]]></category>
		<category><![CDATA[RealmsTM]]></category>
		<category><![CDATA[Sony]]></category>
		<category><![CDATA[Widely]]></category>

		<guid isPermaLink="false">http://www.weez.com/2010/03/enterprisedb-powers-sony-online-entertainments-widely-popular-online-game-free-realmstm/</guid>
		<description><![CDATA[EnterpriseDB Powers Sony Online Entertainment&#8217;s Widely Popular Online Game Free Realms(TM)
EnterpriseDB, the enterprise Postgres company, today announced that its open source solution is powering the databases for Free Realmsâ¢, the free-to-play online virtual world created by Sony Online Entertainment LLC .
Read more on PR Newswire via Yahoo! Finance
]]></description>
			<content:encoded><![CDATA[<p><b>EnterpriseDB Powers Sony Online Entertainment&#8217;s Widely Popular Online Game Free Realms(TM)</b><br />
EnterpriseDB, the enterprise Postgres company, today announced that its open source solution is powering the databases for Free Realmsâ¢, the free-to-play online virtual world created by Sony Online Entertainment LLC .</p>
<p>Read more on <a rel="nofollow" href="http://biz.yahoo.com/prnews/100309/ne65949.html?.v=1">PR Newswire via Yahoo! Finance</a><br/><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.weez.com/2010/03/enterprisedb-powers-sony-online-entertainments-widely-popular-online-game-free-realmstm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>And the answer is ….. Rackspace Cloud!</title>
		<link>http://www.weez.com/2010/03/and-the-answer-is-%e2%80%a6-rackspace-cloud/</link>
		<comments>http://www.weez.com/2010/03/and-the-answer-is-%e2%80%a6-rackspace-cloud/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 20:09:48 +0000</pubDate>
		<dc:creator>Abidoon</dc:creator>
				<category><![CDATA[Drizzle]]></category>
		<category><![CDATA[Answer]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Rackspace]]></category>
		<category><![CDATA[…..]]></category>

		<guid isPermaLink="false">http://www.weez.com/2010/03/and-the-answer-is-%e2%80%a6-rackspace-cloud/</guid>
		<description><![CDATA[A lot of you have been wondering where the Drizzle developers who were working at Sun have landed after the Oracle acquisition. As I&#8217;m sure you have seen by now we are very happy to now be working on Drizzle at Rackspace Cloud. Check out the blogs from Eric, Jay, Monty and Stewart.
-Lee
View full post [...]]]></description>
			<content:encoded><![CDATA[<p>A lot of you have been wondering where the Drizzle developers who were working at Sun have landed after the Oracle acquisition. As I&#8217;m sure you have seen by now we are very happy to now be working on Drizzle at <a href="http://www.rackspacecloud.com/" target="_blank">Rackspace Cloud</a>. Check out the blogs from <a href="http://oddments.org/?p=282" target="_blank">Eric</a>, <a href="http://www.joinfu.com/2010/03/happiness-is-a-warm-cloud/" target="_blank">Jay</a>, <a href="http://inaugust.com/post/77" target="_blank">Monty</a> and <a href="http://www.flamingspork.com/blog/2010/03/11/continuing-the-journey/" target="_blank">Stewart</a>.</p>
<p>-Lee</p>
<p>View full post on <a href="http://blog.drizzle.org/2010/03/11/and-the-answer-is-rackspace-cloud/">DrizzleBlog</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.weez.com/2010/03/and-the-answer-is-%e2%80%a6-rackspace-cloud/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Location for Drizzle Developer Day 2010</title>
		<link>http://www.weez.com/2010/03/location-for-drizzle-developer-day-2010/</link>
		<comments>http://www.weez.com/2010/03/location-for-drizzle-developer-day-2010/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 20:07:17 +0000</pubDate>
		<dc:creator>Abidoon</dc:creator>
				<category><![CDATA[Drizzle]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[location]]></category>

		<guid isPermaLink="false">http://www.weez.com/2010/03/location-for-drizzle-developer-day-2010/</guid>
		<description><![CDATA[We finally have our location for Drizzle Developer Day 2010,  this year it will be at the Santa Clara Convention Center, rooms 209 and 210. As we previously announced the event will be Friday April 16th right after the MySQL User Conference, 9:30 a.m. to 5:00 p.m.
Please make sure and sign up at http://drizzle.org/wiki/Drizzle_Developer_Day_2010_signup. [...]]]></description>
			<content:encoded><![CDATA[<p>We finally have our location for Drizzle Developer Day 2010,  this year it will be at the <a href="http://maps.google.com/maps?f=q&#038;source=s_q&#038;hl=en&#038;geocode=&#038;q=Santa+Clara+Convention+Center&#038;sll=37.427227,-122.130124&#038;sspn=0.009116,0.01899&#038;ie=UTF8&#038;hq=Santa+Clara+Convention+Center&#038;hnear=&#038;z=12&#038;iwloc=A" target="_blank">Santa Clara Convention Center</a>, rooms 209 and 210. As we previously announced the event will be Friday April 16th right after the MySQL User Conference, 9:30 a.m. to 5:00 p.m.</p>
<p>Please make sure and sign up at <a href="http://drizzle.org/wiki/Drizzle_Developer_Day_2010_signup" target="_blank">http://drizzle.org/wiki/Drizzle_Developer_Day_2010_signup</a>. Space will be limited and it is filling up fast. </p>
<p>Also, to make this day a success, please provide your input on discussion topics at <a href="http://drizzle.org/wiki/Drizzle_Developer_Day_2010" target="_blank">http://drizzle.org/wiki/Drizzle_Developer_Day_2010</a></p>
<p>Hope to see you there!</p>
<p>View full post on <a href="http://blog.drizzle.org/2010/03/11/location-for-drizzle-developer-day-2010/">DrizzleBlog</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.weez.com/2010/03/location-for-drizzle-developer-day-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jay Pipes: Recent Work on Improving Drizzle’s Storage Engine API</title>
		<link>http://www.weez.com/2010/03/jay-pipes-recent-work-on-improving-drizzle%e2%80%99s-storage-engine-api/</link>
		<comments>http://www.weez.com/2010/03/jay-pipes-recent-work-on-improving-drizzle%e2%80%99s-storage-engine-api/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 20:06:47 +0000</pubDate>
		<dc:creator>Abidoon</dc:creator>
				<category><![CDATA[Drizzle]]></category>
		<category><![CDATA[Drizzle’s]]></category>
		<category><![CDATA[Engine]]></category>
		<category><![CDATA[Improving]]></category>
		<category><![CDATA[Pipes]]></category>
		<category><![CDATA[Recent]]></category>
		<category><![CDATA[Storage]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.weez.com/2010/03/jay-pipes-recent-work-on-improving-drizzle%e2%80%99s-storage-engine-api/</guid>
		<description><![CDATA[Over the past six weeks or so, I have been working on cleaning up the pluggable storage engine API in Drizzle.  I&#8217;d like to describe some of this work and talk a bit about the next steps I&#8217;m taking in the coming months as we roll towards implementing Log Shipping in Drizzle.
First, how did it [...]]]></description>
			<content:encoded><![CDATA[<p>Over the past six weeks or so, I have been working on cleaning up the pluggable storage engine API in Drizzle.  I&#8217;d like to describe some of this work and talk a bit about the next steps I&#8217;m taking in the coming months as we roll towards implementing <a href="https://blueprints.launchpad.net/drizzle/+spec/replication-log-shipping">Log Shipping in Drizzle</a>.</p>
<p>First, how did it come about that I started working on the storage engine API?</p>
<h3>From Commands to Transactions</h3>
<p>Well, it really goes back to my work on Drizzle&#8217;s replication system.  I had implemented a simple, fast, and extensible log which stored records of the data changes made to a server.  Originally, the log was called the Command Log, because the Google Protobuffer messages it contained were called <tt><a href="http://www.joinfu.com/2009/08/drizzle-replication-the-command-message/">message::Command</a></tt>s.  The API  for implementing replication plugins was very simple and within a month or so of debuting the API, quite a few replication plugins had been built, including one replicating to Memcached, a prototype one replicating to Gearman, and a filtering replicator plugin.</p>
<p>In addition, <a href="http://developian.blogspot.com">Marcus Eriksson</a> had created the <a href="http://www.rabbitreplication.org/">RabbitReplication</a> project which could replicate from Drizzle to other data stores, including Cassandra and Project Voldemort.  However, Marcus did not actually implement any C/C++ plugins using the Drizzle replication API.  Instead, RabbitReplication simply read the new Command Log, which due to it simply being a file full of Google Protobuffer messages, was quick and easy to read into memory using a variety of different programming languages.  RabbitReplication is written in Java, and it was great to see other programming languages be able to read Drizzle&#8217;s replication log so easily.  Marcus <a href="http://developian.blogspot.com/2010/01/replicating-transactions-directly-to.html" alt="Replicate Drizzle to RabbitMQ">later coded up</a> a C++ TransactionApplier plugin which replaces the Drizzle replication log and instead replicates the GPB messages directly to RabbitMQ.</p>
<p>And there, you&#8217;ll note that one of the plugins involved in Drizzle&#8217;s replication system is called <em>Transaction</em>Applier.  It used to be called CommandApplier. That was because the GPB Command messages were individual row change events for the most part.  However, I made a series of changes to the replication API and now the GPB messages sent through the APIs are of class <tt><a href="http://www.joinfu.com/2009/10/drizzle-replication-changes-in-api-to-support-group-commit/">message::Transaction</a></tt>.  <tt>message::Transaction</tt> objects contain a transaction context, with information about the transaction&#8217;s start and end time, it&#8217;s transaction identifer, along with a series of <tt>message::Statement objects</tt>, each of which representing a part of the data changes that the SQL transaction made.</p>
<p>Thus, the Command Log now turned into the Transaction Log, and everywhere the term Command was used now was replaced with the terms Transaction and Statement (depending on whether you were talking about the entire Transaction or a piece of it).  Log entries were now written at COMMIT to the Transaction Log and were not written if no COMMIT occurred<sup>1</sup>.</p>
<p>After finishing this work to make the transaction log write Transaction messages at commit time, I was keen to begin coding up the publisher and subscriber plugins which represent a node in the replication environment.  However, Brian had asked me to delay working on other replication features and ensure that the replication API could support fully distributed transactions via the X/Open XA distributed transaction protocol.  XA support had been removed from Drizzle when the MySQL binlog and original replication system was ripped out and needed some TLC.  Fair enough, I said.  So, off I went to work on XA.</p>
<h3>If Only It Were Simple&#8230;</h3>
<p>As anyone who has worked on the MySQL source code or developed storage engines for MySQL knows, working with the MySQL pluggable storage engine API is sometimes not the easiest or most straightforward thing.  I think the biggest problem with the MySQL storage engine API is that, due to understandable historical reasons, it&#8217;s an API that was designed with the MyISAM and HEAP storage engines in mind.  Much of the transactional pieces of the API seem to be a bolted-on afterthought and can be very confusing to work with.</p>
<p>As an example, <a href="http://pbxt.blogspot.com/">Paul McCullagh</a>, developer of the transactional storage engine <a href="http://www.primebase.org/">PBXT</a>, recently <a href="http://lists.mysql.com/internals/37662">emailed</a> the mysql internals mailing list asking how the storage engine could tell when a SQL statement started and ended.  You would think that such a seemingly basic functionality would have a simple answer.  You&#8217;d be wrong.  <a href="http://monty-says.blogspot.com">Monty Widenius</a> <a href="http://lists.mysql.com/internals/37675">answered</a> like this:</p>
<blockquote><p>
Why not simply have a counter in your transaction object for how start_stmt &#8211; reset();  When this is 0 then you know stmnt ended.</p>
<p>In Maria we count number of calls to external_lock() and when the sum goes to 0 we know the transaction has ended.
</p>
</blockquote>
<p>To this, <a href="http://mysqlha.blogspot.com/">Mark Callaghan</a> responded:</p>
<blockquote><p>
Why does the solution need to be so obscure?
</p>
</blockquote>
<p>Monty <a href="http://lists.mysql.com/internals/37689">answered</a> (emphasis mine):</p>
<blockquote><p>
Historic reasons.</p>
<p>MySQL never kept a count of which handlers are used by a transaction, only which tables.</p>
<p>So the original logic was that external_lock(lock/unlock) is called for each usage of the table, which is normally more than enough information for a handler to know when a statement starts/ends.</p>
<p>The one case this didn&#8217;t work was in the case someone does lock tables as then external_lock is not called per statement. It was to satisfy this case that we added a call to start_stmt() for each table.</p>
<p><strong>It&#8217;s of course possible to change things so that start_stmt() / end_stmt() would be called once per used handler, but this would be yet another overhead for the upper level to do which the current handlers that tracks call to external_lock() doesn&#8217;t need.</strong>
</p>
</blockquote>
<p>Well, in Drizzle-land, we aren&#8217;t beholden to &#8220;historic reasons&#8221; <img src="http://www.joinfu.com/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" />   So, after looking through the in-need-of-attention transaction processing code in the kernel, I decided that I would clean up the API so that storage engines did not have to jump through hoops to notify the kernel they participate in a transaction or just to figure out when a statement and a transaction started and ended.</p>
<p>The resulting changes to the API are quite dramatic I think, but I&#8217;ll leave it to the storage engine developers to tell me if the changes are good or not.  The following is a summary of the changes to the storage engine API that I committed in the last few weeks.</p>
<h3><tt>plugin::StorageEngine</tt> Split Into Subclasses</h3>
<p>The very first thing I did was to split the enormous base plugin class for a storage engine, <tt>plugin::StorageEngine</tt>, into two other subclasses containing transactional elements.  <tt>plugin::TransactionalStorageEngine</tt> is now the base class for all storage engines which implement SQL transactions:</p>
<div class="wp_syntax">
<div class="code">
<pre class="cpp"><span>/**
 * A type of storage engine which supports SQL transactions.
 *
 * This class adds the SQL transactional API to the regular
 * storage engine.  In other words, it adds support for the
 * following SQL statements:
 *
 * START TRANSACTION;
 * COMMIT;
 * ROLLBACK;
 * ROLLBACK TO SAVEPOINT;
 * SET SAVEPOINT;
 * RELEASE SAVEPOINT;
 */</span>
<span>class</span> TransactionalStorageEngine <span>:</span><span>public</span> StorageEngine
<span>&#123;</span>
<span>public</span><span>:</span>
  TransactionalStorageEngine<span>&#40;</span><span>const</span> std<span>::</span><span>string</span> name_arg,
                             <span>const</span> std<span>::</span><span>bitset</span><span>&lt;</span>HTON_BIT_SIZE<span>&gt;</span> <span>&amp;</span>flags_arg<span>=</span> HTON_NO_FLAGS<span>&#41;</span><span>;</span>
&nbsp;
  <span>virtual</span> ~TransactionalStorageEngine<span>&#40;</span><span>&#41;</span><span>;</span>
...
<span>private</span><span>:</span>
  <span>void</span> setTransactionReadWrite<span>&#40;</span>Session<span>&amp;</span> session<span>&#41;</span><span>;</span>
&nbsp;
  <span>/*
   * Indicates to a storage engine the start of a
   * new SQL transaction.  This is called ONLY in the following
   * scenarios:
   *
   * 1) An explicit BEGIN WORK/START TRANSACTION is called
   * 2) After an explicit COMMIT AND CHAIN is called
   * 3) After an explicit ROLLBACK AND RELEASE is called
   * 4) When in AUTOCOMMIT mode and directly before a new
   *    SQL statement is started.
   */</span>
  <span>virtual</span> <span>int</span> doStartTransaction<span>&#40;</span>Session <span>*</span>session, start_transaction_option_t options<span>&#41;</span>
  <span>&#123;</span>
    <span>&#40;</span><span>void</span><span>&#41;</span> session<span>;</span>
    <span>&#40;</span><span>void</span><span>&#41;</span> options<span>;</span>
    <span>return</span> <span>0</span><span>;</span>
  <span>&#125;</span>
&nbsp;
  <span>/**
   * Implementing classes should override these to provide savepoint
   * functionality.
   */</span>
  <span>virtual</span> <span>int</span> doSetSavepoint<span>&#40;</span>Session <span>*</span>session, NamedSavepoint <span>&amp;</span>savepoint<span>&#41;</span><span>=</span> <span>0</span><span>;</span>
  <span>virtual</span> <span>int</span> doRollbackToSavepoint<span>&#40;</span>Session <span>*</span>session, NamedSavepoint <span>&amp;</span>savepoint<span>&#41;</span><span>=</span> <span>0</span><span>;</span>
  <span>virtual</span> <span>int</span> doReleaseSavepoint<span>&#40;</span>Session <span>*</span>session, NamedSavepoint <span>&amp;</span>savepoint<span>&#41;</span><span>=</span> <span>0</span><span>;</span>
&nbsp;
  <span>/**
   * Commits either the &quot;statement transaction&quot; or the &quot;normal transaction&quot;.
   *
   * @param[in] The Session
   * @param[in] true if it's a real commit, that makes persistent changes
   *            false if it's not in fact a commit but an end of the
   *            statement that is part of the transaction.
   * @note
   *
   * 'normal_transaction' is also false in auto-commit mode where 'end of statement'
   * and 'real commit' mean the same event.
   */</span>
  <span>virtual</span> <span>int</span> doCommit<span>&#40;</span>Session <span>*</span>session, <span>bool</span> normal_transaction<span>&#41;</span><span>=</span> <span>0</span><span>;</span>
&nbsp;
  <span>/**
   * Rolls back either the &quot;statement transaction&quot; or the &quot;normal transaction&quot;.
   *
   * @param[in] The Session
   * @param[in] true if it's a real commit, that makes persistent changes
   *            false if it's not in fact a commit but an end of the
   *            statement that is part of the transaction.
   * @note
   *
   * 'normal_transaction' is also false in auto-commit mode where 'end of statement'
   * and 'real commit' mean the same event.
   */</span>
  <span>virtual</span> <span>int</span> doRollback<span>&#40;</span>Session <span>*</span>session, <span>bool</span> normal_transaction<span>&#41;</span><span>=</span> <span>0</span><span>;</span>
  <span>virtual</span> <span>int</span> doReleaseTemporaryLatches<span>&#40;</span>Session <span>*</span>session<span>&#41;</span>
  <span>&#123;</span>
    <span>&#40;</span><span>void</span><span>&#41;</span> session<span>;</span>
    <span>return</span> <span>0</span><span>;</span>
  <span>&#125;</span>
  <span>virtual</span> <span>int</span> doStartConsistentSnapshot<span>&#40;</span>Session <span>*</span>session<span>&#41;</span>
  <span>&#123;</span>
    <span>&#40;</span><span>void</span><span>&#41;</span> session<span>;</span>
    <span>return</span> <span>0</span><span>;</span>
  <span>&#125;</span>
<span>&#125;</span><span>;</span></pre>
</div>
</div>
<p>As you can see, <tt>plugin::TransactionalStorageEngine</tt> inherits from <tt>plugin::StorageEngine</tt> and extends it with a series of private pure virtual methods that implement the SQL transaction parts of a query &mdash; doCommit(), doRollback(), etc.  Implementing classes simply inherit from <tt>plugin::TransactionalStorageEngine</tt> and implement their internal transaction processing in these private methods.</p>
<p>In addition to the SQL transaction, however, is the concept of an XA transaction, which is for distributed transaction coordination.  The <a href="http://en.wikipedia.org/wiki/X/Open_XA">XA protocol</a> is a <a href="http://en.wikipedia.org/wiki/Two-phase_commit">two-phase commit protocol</a> because it implements a PREPARE step before a COMMIT occurs.  This XA API is exposed via two other classes, <tt>plugin::XaResourceManager</tt> and <tt>plugin::XaStorageEngine</tt>.  <tt>plugin::XaResourceManager</tt> derived classes implement the resource manager API of the XA protocol.  <tt>plugin::XaStorageEngine</tt> is a storage engine subclass which, while also implementing SQL transactions, also implements XA transactions.</p>
<p>Here is the <tt>plugin::XaResourceManager</tt> class:</p>
<div class="wp_syntax">
<div class="code">
<pre class="cpp"><span>/**
 * An abstract interface class which exposes the participation
 * of implementing classes in distributed transactions in the XA protocol.
 */</span>
<span>class</span> XaResourceManager
<span>&#123;</span>
<span>public</span><span>:</span>
  XaResourceManager<span>&#40;</span><span>&#41;</span> <span>&#123;</span><span>&#125;</span>
  <span>virtual</span> ~XaResourceManager<span>&#40;</span><span>&#41;</span> <span>&#123;</span><span>&#125;</span>
...
<span>private</span><span>:</span>
  <span>/**
   * Does the COMMIT stage of the two-phase commit.
   */</span>
  <span>virtual</span> <span>int</span> doXaCommit<span>&#40;</span>Session <span>*</span>session, <span>bool</span> normal_transaction<span>&#41;</span><span>=</span> <span>0</span><span>;</span>
  <span>/**
   * Does the ROLLBACK stage of the two-phase commit.
   */</span>
  <span>virtual</span> <span>int</span> doXaRollback<span>&#40;</span>Session <span>*</span>session, <span>bool</span> normal_transaction<span>&#41;</span><span>=</span> <span>0</span><span>;</span>
  <span>/**
   * Does the PREPARE stage of the two-phase commit.
   */</span>
  <span>virtual</span> <span>int</span> doXaPrepare<span>&#40;</span>Session <span>*</span>session, <span>bool</span> normal_transaction<span>&#41;</span><span>=</span> <span>0</span><span>;</span>
  <span>/**
   * Rolls back a transaction identified by a XID.
   */</span>
  <span>virtual</span> <span>int</span> doXaRollbackXid<span>&#40;</span>XID <span>*</span>xid<span>&#41;</span><span>=</span> <span>0</span><span>;</span>
  <span>/**
   * Commits a transaction identified by a XID.
   */</span>
  <span>virtual</span> <span>int</span> doXaCommitXid<span>&#40;</span>XID <span>*</span>xid<span>&#41;</span><span>=</span> <span>0</span><span>;</span>
  <span>/**
   * Notifies the transaction manager of any transactions
   * which had been marked prepared but not committed at
   * crash time or that have been heurtistically completed
   * by the storage engine.
   *
   * @param[out] Reference to a vector of XIDs to add to
   *
   * @retval
   *  Returns the number of transactions left to recover
   *  for this engine.
   */</span>
  <span>virtual</span> <span>int</span> doXaRecover<span>&#40;</span>XID <span>*</span> append_to, <span>size_t</span> len<span>&#41;</span><span>=</span> <span>0</span><span>;</span>
<span>&#125;</span><span>;</span></pre>
</div>
</div>
<p>and here is the <tt>plugin::XaStorageEngine</tt> class:</p>
<div class="wp_syntax">
<div class="code">
<pre class="cpp"><span>/**
 * A type of storage engine which supports distributed
 * transactions in the XA protocol.
 */</span>
<span>class</span> XaStorageEngine <span>:</span><span>public</span> TransactionalStorageEngine,
                       <span>public</span> XaResourceManager
<span>&#123;</span>
<span>public</span><span>:</span>
  XaStorageEngine<span>&#40;</span><span>const</span> std<span>::</span><span>string</span> name_arg,
                  <span>const</span> std<span>::</span><span>bitset</span><span>&lt;</span>HTON_BIT_SIZE<span>&gt;</span> <span>&amp;</span>flags_arg<span>=</span> HTON_NO_FLAGS<span>&#41;</span><span>;</span>
&nbsp;
  <span>virtual</span> ~XaStorageEngine<span>&#40;</span><span>&#41;</span><span>;</span>
  ...
<span>&#125;</span><span>;</span></pre>
</div>
</div>
<p>Pretty clear.  A <tt>plugin::XaStorageEngine</tt> inherits from both <tt>plugin::TransactionStorageEngine</tt> and <tt>plugin::XaResourceManager</tt> because it implements both SQL transactions and XA transactions.  The <tt>InnobaseEngine</tt> is a plugin which inherits from <tt>plugin::XaStorageEngine</tt> because InnoDB supports SQL transactions as well as XA.</p>
<h3>Explicit Statement and Transaction Boundaries</h3>
<p>The second major change I made addressed the problem that Mark Callaghan noted in asking why finding out when a statement starts and ends was so obscure.  I added two new methods to <tt>plugin::StorageEngine</tt> called <tt>doStartStatement()</tt> and <tt>doEndStatement()</tt>.  The kernel now explicitly tells storage engines when a SQL statement starts and ends.  This happens before any calls to <tt>Cursor::external_lock()</tt> happen, and there are no exception cases.  In addition, the kernel now always tells transactional storage engines when a new SQL transaction is starting.  It does this via an explicit call to <tt>plugin::TransactionalStorageEngine::doStartTransaction()</tt>.  No exceptions, and yes, even for DDL operations.</p>
<p>What this means is that for a transactional storage engine, it no longer needs to &#8220;count the calls to Cursor::external_lock()&#8221; in order to know when a statement or transaction starts and ends.  For a SQL transaction, this means that there is a clear code call path and there is no need for the storage engine to track whether the session is in AUTOCOMMIT mode or not.  The kernel does all that work for the storage engine.  Imagine a Session executes a single INSERT statement against an InnoDB table while in AUTOCOMMIT mode.  This is what the call path looks like:</p>
<pre>
 drizzled::Statement::Insert::execute()
 |
 -> drizzled::mysql_lock_tables()
    |
    -> drizzled::TransactionServices::registerResourceForTransaction()
       |
       -> drizzled::plugin::TransactionalStorageEngine::startTransaction()
          |
          -> InnobaseEngine::doStartTransaction()
       |
       -> drizzled::plugin::StorageEngine::startStatement()
          |
          -> InnobaseEngine::doStartStatement()
       |
       -> drizzled::plugin::StorageEngine::getCursor()
          |
          -> drizzled::Cursor::write_row()
             |
             -> InnobaseCursor::write_row()
       |
       -> drizzled::TransactionServices::autocommitOrRollback()
          |
          -> drizzled::plugin::TransactionStorageEngine::commit()
             |
             -> InnobaseEngine::doCommit()
</pre>
<p>I think this will come as a welcome change to storage engine developers working with Drizzle.</p>
<h3>No More Need for Engine to Call <tt>trans_register_ha()</tt></h3>
<p>There was an interesting comment in the <a href="http://bazaar.launchpad.net/~mysql/mysql-server/mysql-next-mr/annotate/head%3A/sql/handler.cc">original documentation</a> for the transaction processing code.  It read:</p>
<blockquote><p>
  Roles and responsibilities<br />
  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>  The server has no way to know that an engine participates in<br />
  the statement and a transaction has been started<br />
  in it unless the engine says so. Thus, in order to be<br />
  a part of a transaction, the engine must &#8220;register&#8221; itself.<br />
  This is done by invoking trans_register_ha() server call.<br />
  Normally the engine registers itself whenever handler::external_lock()<br />
  is called. trans_register_ha() can be invoked many times: if<br />
  an engine is already registered, the call does nothing.<br />
  In case autocommit is not set, the engine must register itself<br />
  twice &#8212; both in the statement list and in the normal transaction<br />
  list.
</p>
</blockquote>
<p>That comment, and I&#8217;ve read it dozens of times, always seemed strange to me.  I mean, does the server <em>really not know</em> that an engine participates in a statement or transaction unless the engine tells it?  Of course not.</p>
<p>So, I removed the need for a storage engine to &#8220;register itself&#8221; with the kernel.  Now, the transaction manager inside the Drizzle kernel (implemented in the TransactionServices component) automatically monitors which engines are participating in an SQL transaction and the engine doesn&#8217;t need to do anything to register itself.</p>
<p>In addition, due to the break-up of the <tt>plugin::StorageEngine</tt> class and the XA API into <tt>plugin::XaResourceManager</tt>, Drizzle&#8217;s transaction manager can now coordinate XA transactions from <em>plugins other than storage engines</em>.  Yep, that&#8217;s right.  Any plugin which implements <tt>plugin::XaResourceManager</tt> can participate in an XA transaction and Drizzle will act as the transaction manager.  What&#8217;s the first plugin that will do this?  Drizzle&#8217;s transaction log.  The transaction log isn&#8217;t a storage engine, but it <em>is</em> able to participate in an XA transaction, so it will implement <tt>plugin::XaResourceManager</tt> but not <tt>plugin::StorageEngine</tt>.</p>
<h3>Performance Impact of Code Changes</h3>
<p>So, that &#8220;yet another overhead&#8221; Monty talked about in the quote above?  There wasn&#8217;t any noticeable impact in performance or scalability at all.  So much for optimize-first coding.</p>
<h3>What&#8217;s Next?</h3>
<p>The next thing I&#8217;m working on is removing the notion of the &#8220;statement transaction&#8221;, which is also a historical by-product, this time because of BerkeleyDB.  Gee, I&#8217;ve got a lot of work ahead of me&#8230;</p>
<p><sup>[1]</sup> Actually, there is a way that a transaction that was rolled back can get written to the transaction log.  For bulk operations, the server can cut a Transaction message into multiple segments, and if the SQL transaction is rolled back, a special RollbackStatement message is written to the transaction log.</p>
<p>View full post on <a href="http://www.joinfu.com/2010/03/recent-work-on-improving-drizzles-storage-engine-api/">Planet Drizzle</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.weez.com/2010/03/jay-pipes-recent-work-on-improving-drizzle%e2%80%99s-storage-engine-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux Web Hosting</title>
		<link>http://www.weez.com/2010/03/linux-web-hosting/</link>
		<comments>http://www.weez.com/2010/03/linux-web-hosting/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 19:57:01 +0000</pubDate>
		<dc:creator>Abidoon</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Hosting]]></category>

		<guid isPermaLink="false">http://www.weez.com/2010/03/linux-web-hosting/</guid>
		<description><![CDATA[&#13;
What Is Linux :-
Linux is an operating system that was initially created as a
hobby by a young student, Linus Torvalds, at the University of
Helsinki in Finland. Linus had an interest in Minix, a small
UNIX system, and decided to develop a system that exceeded the
Minix standards.
Linux is developed under the GNU General Public License and its
source [...]]]></description>
			<content:encoded><![CDATA[<p>&#13;</p>
<p>What Is Linux :-</p>
<p>Linux is an operating system that was initially created as a<br />
hobby by a young student, Linus Torvalds, at the University of<br />
Helsinki in Finland. Linus had an interest in Minix, a small<br />
UNIX system, and decided to develop a system that exceeded the<br />
Minix standards.</p>
<p>Linux is developed under the GNU General Public License and its<br />
source code is freely available to everyone. Linux may be used<br />
for a wide variety of purposes including networking, software<br />
development, and as an end-user platform.</p>
<p>Linux is often considered an excellent, low-cost alternative to<br />
other more expensive operating systems. Due to the very nature<br />
of Linux&#8217;s functionality and availability, it has become quite<br />
popular worldwide and a vast number of software programmers have<br />
taken Linux&#8217;s source code and adapted it to meet their<br />
individual needs. </p>
<p>At this time, there are dozens of ongoing projects for porting<br />
Linux to various hardware configurations and purposes. Here are<br />
10 reasons why Linux could be the best operating system for you.</p>
<p> A Linux Distribution has thousands of dollars worth of software<br />
for no cost (or a couple of dollars if purchased on CD). Linux<br />
is a complete operating system that is :-</p>
<p>Stable &#8211; the crash of an application is much less likely to<br />
bring down the operating system under Linux</p>
<p>Reliable &#8211; Linux servers are often up for hundreds of days<br />
compared with the regular reboots required with a Windows<br />
system. Extremely powerful.</p>
<p> Comes with a complete development environment, including C,<br />
C++, Fortran compilers, and toolkits such as Qt and scripting<br />
languages such as Perl, Awk and sed. A C compiler for Windows<br />
alone would set you back hundreds of dollars.</p>
<p> Excellent networking facilities: allowing you to share CPUs,<br />
share modems etc; all of which are not included or available<br />
with Windows 95 The ideal environment to run servers such as a<br />
web server (e.g. Apache), or an FTP server. </p>
<p> A wide variety of commercial software is available if the free<br />
software doesn&#8217;t satisfy your needs.</p>
<p> An operating system that is easily upgradeable. After any<br />
length of time a typical installation of Windows and software<br />
gets into a complete mess. Often the only way to clear out all<br />
the debris is to reformat the hard disk and start again. Linux,<br />
however, is much better for maintaining the system.</p>
<p> Supports multiple processors as standard.</p>
<p> True multi-tasking; the ability to run more than one program at<br />
the same time.</p>
<p> Excellent window systems called X; the equivalent of Windows<br />
but much more flexible.</p>
<p>Linux holds a major share as a server operating system and has<br />
the largest market share for the entire Internet. It is also<br />
increasingly popular on the desktop as well. Internet Presence<br />
Division provides value-added service and support on all<br />
versions of Linux. </p>
<p>For more articles Please visit <a rel="nofollow" onclick="javascript:pageTracker._trackPageview('/outgoing/article_exit_link');" href="http://www.allwebhosts.com.ru/articles.html">Articles at<br />
All Web Hosts</a></p>
<div style="margin:5px;padding:5px;border:1px solid #c1c1c1;font-size: 10px;">
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.weez.com/2010/03/linux-web-hosting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Latest PHP Auctions</title>
		<link>http://www.weez.com/2010/03/latest-php-auctions-22/</link>
		<comments>http://www.weez.com/2010/03/latest-php-auctions-22/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 19:53:29 +0000</pubDate>
		<dc:creator>Abidoon</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Auctions]]></category>
		<category><![CDATA[Latest]]></category>

		<guid isPermaLink="false">http://www.weez.com/2010/03/latest-php-auctions-22/</guid>
		<description><![CDATA[Hey, check out these auctions:
Cool, arent they?
]]></description>
			<content:encoded><![CDATA[<p>Hey, check out these auctions:<br />
<div style="padding-top:10px;"><a rel="nofollow" href="http://cgi.ebay.com/Story-Sharing-Php-Script-website-with-mrr-resale-rights_W0QQitemZ320501293699QQcmdZViewItemQQssPageNameZRSS:B:SRCH:US:101"><b>Story Sharing Php Script website with mrr resale rights</b></a><br /><table border="0" cellpadding="8"><tr><td><a href="http://cgi.ebay.com/Story-Sharing-Php-Script-website-with-mrr-resale-rights_W0QQitemZ320501293699QQcmdZViewItemQQssPageNameZRSS:B:SRCH:US:102"><img border="0" src="http://thumbs.ebaystatic.com/pict/320501293699_0.jpg"></a></td><td><strong>US &#36;0.99</strong> (0 Bid)<br /> End Date: Sunday Mar-14-2010 6:50:13 PDT<br /><a href="http://cgi.ebay.com/Story-Sharing-Php-Script-website-with-mrr-resale-rights_W0QQitemZ320501293699QQcmdZViewItemQQssPageNameZRSS:B:SRCH:US:103">Bid now</a> | <a href="http://cgi1.ebay.com/ws/eBayISAPI.dll?MfcISAPICommand=MakeTrack&item=320501293699&ssPageName=RSS:B:SRCH:US:104">Add to watch list</a></td></tr></table>
</div><div style="padding-top:10px;"><a rel="nofollow" href="http://cgi.ebay.com/Percys-XX-Carbon-Exhaust-Header-Gasket-68018_W0QQitemZ330412953787QQcmdZViewItemQQssPageNameZRSS:B:SRCH:US:101"><b>Percy's XX Carbon Exhaust Header Gasket 68018</b></a><br /><table border="0" cellpadding="8"><tr><td><a href="http://cgi.ebay.com/Percys-XX-Carbon-Exhaust-Header-Gasket-68018_W0QQitemZ330412953787QQcmdZViewItemQQssPageNameZRSS:B:SRCH:US:102"><img border="0" src="http://thumbs.ebaystatic.com/pict/330412953787_0.jpg"></a></td><td><strong>US &#36;17.95</strong><br /> End Date: Sunday Mar-14-2010 6:51:41 PDT<br />Buy It Now for only: US &#36;17.95<br /><a href="http://cgi.ebay.com/Percys-XX-Carbon-Exhaust-Header-Gasket-68018_W0QQitemZ330412953787QQcmdZViewItemQQssPageNameZRSS:B:SRCH:US:105">Buy it now</a> | <a href="http://cgi1.ebay.com/ws/eBayISAPI.dll?MfcISAPICommand=MakeTrack&item=330412953787&ssPageName=RSS:B:SRCH:US:104">Add to watch list</a></td></tr></table>
</div><br />
Cool, arent they?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.weez.com/2010/03/latest-php-auctions-22/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP and MySQL by Example</title>
		<link>http://www.weez.com/2010/03/php-and-mysql-by-example/</link>
		<comments>http://www.weez.com/2010/03/php-and-mysql-by-example/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 19:49:03 +0000</pubDate>
		<dc:creator>Abidoon</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Example]]></category>

		<guid isPermaLink="false">http://www.weez.com/2010/03/php-and-mysql-by-example/</guid>
		<description><![CDATA[
Product DescriptionQuickly master dynamic, database-driven Web development—no experience necessary!Even if you’re completely new to PHP, MySQL, and Web database development, this book will guide you through every step of building powerful, database-driven, dynamic Web sites. Direct from the world’s top scripting instructor, Ellie Quigley, PHP and MySQL by Example illuminates every concept with tested code [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.com/PHP-MySQL-Example-Ellie-Quigley/dp/0131875086%3FSubscriptionId%3D0C19XXHDAH4R099HQER2%26tag%3Dreaditlcom-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0131875086" rel="nofollow"><img style="float:left;margin: 0 20px 10px 0;" src="http://ecx.images-amazon.com/images/I/51TZGHZPDAL._SL160_.jpg" /></a></p>
<p><b>Product Description</b><br />Quickly master dynamic, database-driven Web development—no experience necessary!Even if you’re completely new to PHP, MySQL, and Web database development, this book will guide you through every step of building powerful, database-driven, dynamic Web sites. Direct from the world’s top scripting instructor, Ellie Quigley, <b>PHP and MySQL by Example</b> illuminates every concept with tested code examples, screen shots showing program output, and clear, line-by-l&#8230; <a href="http://www.amazon.com/PHP-MySQL-Example-Ellie-Quigley/dp/0131875086%3FSubscriptionId%3D0C19XXHDAH4R099HQER2%26tag%3Dreaditlcom-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0131875086" rel="nofollow">More >></a></p>
<p><a href="http://www.amazon.com/PHP-MySQL-Example-Ellie-Quigley/dp/0131875086%3FSubscriptionId%3D0C19XXHDAH4R099HQER2%26tag%3Dreaditlcom-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0131875086" title="PHP and MySQL by Example" rel="nofollow"><b>PHP and MySQL by Example</b></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.weez.com/2010/03/php-and-mysql-by-example/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Bad Block At Beginning Of Inode Table May Cause Data Loss In Linux</title>
		<link>http://www.weez.com/2010/03/bad-block-at-beginning-of-inode-table-may-cause-data-loss-in-linux/</link>
		<comments>http://www.weez.com/2010/03/bad-block-at-beginning-of-inode-table-may-cause-data-loss-in-linux/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 19:39:17 +0000</pubDate>
		<dc:creator>Abidoon</dc:creator>
				<category><![CDATA[Fedora]]></category>
		<category><![CDATA[Beginning]]></category>
		<category><![CDATA[block]]></category>
		<category><![CDATA[Cause]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[Inode]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Loss]]></category>
		<category><![CDATA[table]]></category>

		<guid isPermaLink="false">http://www.weez.com/2010/03/bad-block-at-beginning-of-inode-table-may-cause-data-loss-in-linux/</guid>
		<description><![CDATA[&#13;
Are you unable to mount your Linux hard drive volume? Are you facing superblock, inode, or file system corruption like error messages while booting your Linux system? Such situations are caused by corruption of Linux hard drive metadata structures. This behavior of Linux operating system renders all your significant data inaccessible and leads to significant [...]]]></description>
			<content:encoded><![CDATA[<p>&#13;</p>
<p>Are you unable to mount your Linux hard drive volume? Are you facing superblock, inode, or file system corruption like error messages while booting your Linux system? Such situations are caused by corruption of Linux hard drive metadata structures. This behavior of Linux operating system renders all your significant data inaccessible and leads to significant data loss. In order to get your mission-critical data recovered, you should opt for Linux Data Recovery solutions through reliable tools. </p>
<p>In a practical scenario, you may encounter the below error messages after copying your data through ddrescue command-line tool and running e2fsck utility:</p>
<p>“Superblock has a bad ext3 journal (inode 8).<br />Clear? Yes”</p>
<p>Or</p>
<p>“/dev/sdf was not cleanly unmounted, check forced.<br />Pass 1: Checking inodes, blocks, and sizes<br />Pass 2: Checking directory structure<br />Missing &#8216;..&#8217; in directory inode 1785876.<br />Fix? Yes</p>
<p>Pass 3: Checking directory connectivity<br />Root inode is not a directory; aborting.<br />e2fsck: aborted<br />fsck.ext2 /dev/sdf failed (status 0&#215;8). Run manually.”</p>
<p>After the above error message, you can not access your precious data from the hard drive. In order to get your lost data back, and to sort out these errors, you should perform Data Recovery Linux. </p>
<p>Resolution</p>
<p>The problem is caused by bad block at the starting of inode table. You can fix the problem by reconstructing root inode. It is quite easy to reconstruct the root inode, however the problem is that root inode needs to be placed at fixed location and currently a bad block is located there. </p>
<p>Forcing the hard drive to use spare block from its pool is possible, however a bad block is often an indicator of the beginning of hard drive crash. Thus, replacing the affected hard drive with new one is the safest way to recover from this situation. Use &#8216;dd&#8217; command to copy data from old hard drive to new one. Then run e2fsck to create a new root directory on the new hard drive, and shift all the inodes, respectively. </p>
<p>If the above method does not solve your problem, <a rel="nofollow" onclick="javascript:pageTracker._trackPageview('/outgoing/article_exit_link');" href="http://www.data-recovery-linux.com">Linux Recovery</a> applications perform absolute recovery. They use high-end scanning techniques to methodically scan the entire hard drive and get all your precious data recovered. The <a rel="nofollow" onclick="javascript:pageTracker._trackPageview('/outgoing/article_exit_link');" href="http://www.data-recovery-linux.com">Linux Data Recovery</a> software come equipped with simple and rich graphical user interface to enable easy recovery. </p>
<p>Stellar Phoenix Linux Data Recovery is the most effective solution for all logical data loss scenarios. The software recovers Ext4, Ext3, Ext2, FAT12, FAT16, and FAT32 file system volumes. It is compatible with all major distributions of Linux operating system such as Red Hat, Debian, Fedora, SUSE, and Ubuntu.</p>
<div style="margin:5px;padding:5px;border:1px solid #c1c1c1;font-size: 10px;">
<p>Maria Peter a student of Mass Communication doing research on <a rel="nofollow" onclick="javascript:pageTracker._trackPageview('/outgoing/article_exit_link');" href="http://www.data-recovery-linux.com">Data recovery Linux</a> , Linux Data Recovery software And Ext2 Recovery. she is also a freelancer for <a rel="nofollow" onclick="javascript:pageTracker._trackPageview('/outgoing/article_exit_link');" href="http://ext3-file-recovery.data-recovery-linux.com">http://ext3-file-recovery.data-recovery-linux.com/</p>
<p></a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.weez.com/2010/03/bad-block-at-beginning-of-inode-table-may-cause-data-loss-in-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Roma Nell&#8217;anno Mdcccxxxviii , Volume 3</title>
		<link>http://www.weez.com/2010/03/roma-nellanno-mdcccxxxviii-volume-3/</link>
		<comments>http://www.weez.com/2010/03/roma-nellanno-mdcccxxxviii-volume-3/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 19:39:16 +0000</pubDate>
		<dc:creator>Abidoon</dc:creator>
				<category><![CDATA[CentOS]]></category>
		<category><![CDATA[Mdcccxxxviii]]></category>
		<category><![CDATA[Nell'anno]]></category>
		<category><![CDATA[Roma]]></category>
		<category><![CDATA[Volume]]></category>

		<guid isPermaLink="false">http://www.weez.com/2010/03/roma-nellanno-mdcccxxxviii-volume-3/</guid>
		<description><![CDATA[
Roma Nell&#8217;anno Mdcccxxxviii , Volume 3 
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.com/Roma-Nellanno-Mdcccxxxviii-Milleotto-Cento-Trentotto-Italian/dp/1143829956%3FSubscriptionId%3D0C19XXHDAH4R099HQER2%26tag%3Dreaditlcom-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D1143829956" rel="nofollow"><img style="float:left;margin: 0 20px 10px 0;" src="http://ecx.images-amazon.com/images/I/51ZxwejZ60L._SL160_.jpg" /></a></p>
<p><a href="http://www.amazon.com/Roma-Nellanno-Mdcccxxxviii-Milleotto-Cento-Trentotto-Italian/dp/1143829956%3FSubscriptionId%3D0C19XXHDAH4R099HQER2%26tag%3Dreaditlcom-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D1143829956" title="Roma Nell'anno Mdcccxxxviii , Volume 3 " rel="nofollow"><b>Roma Nell&#8217;anno Mdcccxxxviii , Volume 3 </b></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.weez.com/2010/03/roma-nellanno-mdcccxxxviii-volume-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Basic Advantages of Linux Server Hosting and Windows Server Hosting</title>
		<link>http://www.weez.com/2010/03/basic-advantages-of-linux-server-hosting-and-windows-server-hosting/</link>
		<comments>http://www.weez.com/2010/03/basic-advantages-of-linux-server-hosting-and-windows-server-hosting/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 18:13:46 +0000</pubDate>
		<dc:creator>Abidoon</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Advantages]]></category>
		<category><![CDATA[Basic]]></category>
		<category><![CDATA[Hosting]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.weez.com/2010/03/basic-advantages-of-linux-server-hosting-and-windows-server-hosting/</guid>
		<description><![CDATA[&#13;
When you are going to hire a hosting service to build your website for your small business then you need to know the basic things of web hosting. You are the best person to judge that what required features are and what about your budget.
&#13;
Commonly, this choice to host your website depends upon the scripting [...]]]></description>
			<content:encoded><![CDATA[<p>&#13;</p>
<p>When you are going to hire a hosting service to build your website for your small business then you need to know the basic things of web hosting. You are the best person to judge that what required features are and what about your budget.</p>
<p>&#13;</p>
<p>Commonly, this choice to host your website depends upon the scripting language that is used in your website. If languages like PHP, MySQL, or Perl are used in your website, <a rel="nofollow" onclick="javascript:pageTracker._trackPageview('/outgoing/article_exit_link');" href="http://www.aussiehost.com.au/">Linux server hosting</a> is preferable. But if you are thinking for ASP Dot Net scripting language then your finest choice would the window hosting.</p>
<p>&#13;</p>
<p>If you need some interactive facilities like chat or searchable database, Linux may not be the best choice. Also, a Linux-based web server is not fully acquiescent with Windows technologies. If you are using any Windows-centric technologies like Visual Basic, then Windows-based servers would be the required choice for you.</p>
<p><b>Advantages of Linux server hosting</b></p>
<p>&#13;</p>
<p>1. Linux is an open source software product and thus it does not need the high licensing fees that other operating systems do; you can freely download and use it at no cost.</p>
<p>&#13;</p>
<p>2. A Linux website can easily be converted to a Windows website without much hassle. Also, the website can easily be changed as the requirement of the user grows.</p>
<p>&#13;</p>
<p>3. Linux web hosting is very economical as Linux is a free operating system. Usually, only the cost of distribution is borne by the host or owner.</p>
<p>&#13;</p>
<p>4. When the scripting language like PHP, MySQL, or Perl etc. are required for your website then Linux server hosting is the most reliable and cost effective solution for you. Unless heavy load of scripting language, this will not be traceable.</p>
<p>&#13;</p>
<p>5. There are many kinds of databases that run on Linux hosting, but the most widespread most likely among web host providers are mSQL, MySQL and PostgreSQL. These databases are relational by nature, and permit vastly optimized communication with your website for rapid reclamation of data.</p>
<p>&#13;</p>
<p>6. By lots of circles Linux hosting is supposed to be much securing than Windows hosting, and for that reason only Linux server hosting is also the more popular choice for web designers and programmers.</p>
<p><b>Advantages of windows server hosting</b></p>
<p>&#13;</p>
<p>1. .NET technologies like ASP dot net VB dot net are available on this platform. If you have a website built with Microsoft .NET technologies then you will have to choose a Windows server hosting plan.</p>
<p>&#13;</p>
<p>2. If you need an enterprise class database there are some different features that run on a Linux platform but if you need Microsoft&#8217;s MSSQL database, a Windows hosting plan will be your best choice.</p>
<p>&#13;</p>
<p>3. Access Databases are only obtainable with a Windows server hosting plan. Access can only run on a Microsoft Windows platform and thus it is unavailable on a Linux hosting. If your site needs particularly this feature then you will have to accept <a rel="nofollow" onclick="javascript:pageTracker._trackPageview('/outgoing/article_exit_link');" href="http://www.planethost.com.au/">windows server hosting</a>.</p>
<p>&#13;</p>
<p>4. If you are using some of the Microsoft&#8217;s Sharepoint services a Windows Hosting plan is only reliable choice for you.</p>
<p>&#13;</p>
<p>5. Windows plans typically much costly because of the license costs compulsory by Microsoft.</p>
<p>&#13;</p>
<p>Normally, Linux server hosting plans are at least 20% economical than windows server hosting plans. If you need not to have any unique features for your website, like cart, searchable database etc, Linux server hosting is a finest alternative for your needs.</p>
<p>&#13;</p>
<p>When you are required for specific Microsoft technologies, Windows hosting plans generally will be your favorable think. But for all small business owner needs Linux hosting plans will generally perform quite well for its cost effective features.</p>
<div style="margin:5px;padding:5px;border:1px solid #c1c1c1;font-size: 10px;">
<p>This article was written by Joanna Gadel who has been working as a senior representative of <a rel="nofollow" onclick="javascript:pageTracker._trackPageview('/outgoing/article_exit_link');" href="http://www.aussiehost.com.au/">web hosting Australia</a> Company that offers Windows server hosting and <a rel="nofollow" onclick="javascript:pageTracker._trackPageview('/outgoing/article_exit_link');" href="http://www.planethost.com.au/">Linux server hosting</a> plans.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.weez.com/2010/03/basic-advantages-of-linux-server-hosting-and-windows-server-hosting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
