<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>Aquiles Wiki Rss Feed</title><link>http://aquiles.codeplex.com/</link><description>Aquiles Wiki Rss Description</description><item><title>New Comment on "Installing Cassandra"</title><link>http://aquiles.codeplex.com/wikipage?title=Installing Cassandra&amp;ANCHOR#C22493</link><description>Please add semicolon &amp;#59; after the connection code as I got very confused because of this &amp;#33;&amp;#10;Regards,</description><author>Ghoneim</author><pubDate>Tue, 07 Feb 2012 04:12:19 GMT</pubDate><guid isPermaLink="false">New Comment on "Installing Cassandra" 20120207041219A</guid></item><item><title>Updated Wiki: Aquiles.Connection.Pooling.SizeControlledConnectionPool</title><link>http://aquiles.codeplex.com/wikipage?title=Aquiles.Connection.Pooling.SizeControlledConnectionPool&amp;version=3</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;SizeControlledConnectionPool&lt;/h1&gt;&lt;hr /&gt;
&lt;h1&gt;Description&lt;/h1&gt;This implementation of &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Connection.Pooling.IConnectionPool&amp;referringTitle=Aquiles.Connection.Pooling.SizeControlledConnectionPool"&gt;Aquiles.Connection.Pooling.IConnectionPool&lt;/a&gt; has a pooling mechanism with the following features:
&lt;ul&gt;&lt;li&gt;Warm-up capabilities&lt;/li&gt;
&lt;li&gt;Minimum and maximum size control for connection within the pool&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;This implementation also support for configuring all this features by adding some entries in the SpecialConnectionParameters within the connection node inside the AquilesConfiguration:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;minimumClientsToKeepInPool&lt;/b&gt; (default 10): let you set the number of connections to keep in the pool.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;maximumClientsToSupportInPool&lt;/b&gt; (default 1000): let you set the number of connections to handle within the pool after which the pool will no longer create any new connection.&lt;/li&gt;
&lt;li&gt;*poolDueTime&amp;quot; (default never): time to wait to start the cleaning thread on the pool.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;poolPeriodicTime&lt;/b&gt; (default never): time to wait between each cleanse.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;endpointManagerDueTime&lt;/b&gt; (default): time to wait to start the health checker on blackisted endpoints.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;endpointManagerPeriodicTime&lt;/b&gt; (default): time to wait between each health checking.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;maximumRetriesToPollClient&lt;/b&gt; (default 0): how many times an execution will be retried before a fail. A retryable error would be if the connection is closed or something similar.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;magicNumber&lt;/b&gt; (default 7): let you set a divider number which will be use to choose how many iddle connections will be free on each run of the garbage collector of idle connections.&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;To clarify this use, consider the following ecuation:&lt;br /&gt;&lt;b&gt;Qm&lt;/b&gt; = minimum quantity of connections to keep&lt;br /&gt;&lt;b&gt;QM&lt;/b&gt; = maximum quantity of connections to keep / create&lt;br /&gt;&lt;b&gt;mM&lt;/b&gt; = magic number&lt;br /&gt;&lt;b&gt;FC&lt;/b&gt; = Connections to free from the idle list&lt;br /&gt;&lt;br /&gt;then&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;b&gt;FC = (QM - Qm) / mM&lt;/b&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;
So, it will take the amount in FC from the iddle list. This process will control to leave, at least, the minimum quantity configured in the list.&lt;br /&gt;&lt;br /&gt;Also, you can set the retry quantity when polling connection from the pool by using the property &lt;b&gt;maximumRetriesToPollClient&lt;/b&gt;. Default value of this property is 0.&lt;br /&gt;&lt;br /&gt;An example of configuration:&lt;br /&gt;&lt;pre&gt;
        &amp;lt;connection poolType=&amp;quot;&amp;quot; factoryType=&amp;quot;BUFFERED&amp;quot;&amp;gt;
          &amp;lt;specialConnectionParameters&amp;gt;
            &amp;lt;add key=&amp;quot;minimumClientsToKeepInPool&amp;quot; value=&amp;quot;20&amp;quot; /&amp;gt;
            &amp;lt;add key=&amp;quot;maximumClientsToSupportInPool&amp;quot; value=&amp;quot;1000&amp;quot; /&amp;gt;
            &amp;lt;add key=&amp;quot;magicNumber&amp;quot; value=&amp;quot;7&amp;quot; /&amp;gt;
            &amp;lt;add key=&amp;quot;maximumRetriesToPollClient&amp;quot; value=&amp;quot;3&amp;quot; /&amp;gt;
          &amp;lt;/specialConnectionParameters&amp;gt;
        &amp;lt;/connection&amp;gt;
&lt;/pre&gt;
&lt;hr /&gt;

&lt;h2&gt;Summary&lt;/h2&gt;&lt;b&gt;Type:&lt;/b&gt; Internal Class&lt;br /&gt;&lt;b&gt;Namespace / Package:&lt;/b&gt; Aquiles.Connection.Pooling&lt;br /&gt;&lt;b&gt;All implemented interfaces:&lt;/b&gt; &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Connection.Pooling.IConnectionPool&amp;referringTitle=Aquiles.Connection.Pooling.SizeControlledConnectionPool"&gt;Aquiles.Connection.Pooling.IConnectionPool&lt;/a&gt;&lt;br /&gt;&lt;b&gt;All extended interfaces:&lt;/b&gt; None&lt;br /&gt;&lt;b&gt;All extended classes:&lt;/b&gt; Dont apply&lt;br /&gt;&lt;b&gt;Direct Known interfaces:&lt;/b&gt; None&lt;br /&gt;&lt;b&gt;Direct Known classes:&lt;/b&gt; None
&lt;hr /&gt;

&lt;h2&gt;Constructors&lt;/h2&gt;No public constructor available
&lt;hr /&gt;

&lt;h2&gt;Properties from &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Connection.Pooling.IConnectionPool&amp;referringTitle=Aquiles.Connection.Pooling.SizeControlledConnectionPool"&gt;Aquiles.Connection.Pooling.IConnectionPool&lt;/a&gt;&lt;/h2&gt;&lt;blockquote&gt;&lt;blockquote&gt;public string Name&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;public Aquiles.Connection.Endpoint.IEndpointManager EndpointManager&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;public Aquiles.Connection.Factory.IConnectionFactory ConnectionFactory&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;public Aquiles.Configuration.SpecialConnectionParameterCollection SpecialConnectionParameters&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;hr /&gt;

&lt;h2&gt;Methods  from &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Connection.Pooling.IConnectionPool&amp;referringTitle=Aquiles.Connection.Pooling.SizeControlledConnectionPool"&gt;Aquiles.Connection.Pooling.IConnectionPool&lt;/a&gt;&lt;/h2&gt;&lt;blockquote&gt;&lt;blockquote&gt;public void Initialize()&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;public Aquiles.Model.Internal.CassandraClient Borrow()&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;public void Release(Aquiles.Model.Internal.CassandraClient cassandraClient)&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;public void Invalidate(Aquiles.Model.Internal.CassandraClient cassandraClient)&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>javiercanillas</author><pubDate>Thu, 19 Jan 2012 16:43:25 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Aquiles.Connection.Pooling.SizeControlledConnectionPool 20120119044325P</guid></item><item><title>Updated Wiki: Aquiles.Connection.Pooling.SizeControlledConnectionPool</title><link>http://aquiles.codeplex.com/wikipage?title=Aquiles.Connection.Pooling.SizeControlledConnectionPool&amp;version=2</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;SizeControlledConnectionPool&lt;/h1&gt;&lt;hr /&gt;
&lt;h1&gt;Description&lt;/h1&gt;This implementation of &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Connection.Pooling.IConnectionPool&amp;referringTitle=Aquiles.Connection.Pooling.SizeControlledConnectionPool"&gt;Aquiles.Connection.Pooling.IConnectionPool&lt;/a&gt; has a pooling mechanism with the following features:
&lt;ul&gt;&lt;li&gt;Warm-up capabilities&lt;/li&gt;
&lt;li&gt;Minimum and maximum size control for connection within the pool&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;This implementation also support for configuring all this features by adding some entries in the SpecialConnectionParameters within the connection node inside the AquilesConfiguration:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;minimumClientsToKeepInPool&lt;/b&gt; (default 10): let you set the number of connections to keep in the pool.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;maximumClientsToSupportInPool&lt;/b&gt; (default 1000): let you set the number of connections to handle within the pool after which the pool will no longer create any new connection.&lt;/li&gt;
&lt;li&gt;*poolDueTime&amp;quot; (default never): time to wait to start the cleaning thread on the pool.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;poolPeriodicTime&lt;/b&gt; (default never): time to wait between each cleanse.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;endpointManagerDueTime&lt;/b&gt; (default): time to wait to start the health checker on blackisted endpoints.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;endpointManagerPeriodicTime&lt;/b&gt; (default): time to wait between each health checking.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;magicNumber&lt;/b&gt; (default 7): let you set a divider number which will be use to choose how many iddle connections will be free on each run of the garbage collector of idle connections.&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;To clarify this use, consider the following ecuation:&lt;br /&gt;&lt;b&gt;Qm&lt;/b&gt; = minimum quantity of connections to keep&lt;br /&gt;&lt;b&gt;QM&lt;/b&gt; = maximum quantity of connections to keep / create&lt;br /&gt;&lt;b&gt;mM&lt;/b&gt; = magic number&lt;br /&gt;&lt;b&gt;FC&lt;/b&gt; = Connections to free from the idle list&lt;br /&gt;&lt;br /&gt;then&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;b&gt;FC = (QM - Qm) / mM&lt;/b&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;
So, it will take the amount in FC from the iddle list. This process will control to leave, at least, the minimum quantity configured in the list.&lt;br /&gt;&lt;br /&gt;Also, you can set the retry quantity when polling connection from the pool by using the property &lt;b&gt;maximumRetriesToPollClient&lt;/b&gt;. Default value of this property is 0.&lt;br /&gt;&lt;br /&gt;An example of configuration:&lt;br /&gt;&lt;pre&gt;
        &amp;lt;connection poolType=&amp;quot;&amp;quot; factoryType=&amp;quot;BUFFERED&amp;quot;&amp;gt;
          &amp;lt;specialConnectionParameters&amp;gt;
            &amp;lt;add key=&amp;quot;minimumClientsToKeepInPool&amp;quot; value=&amp;quot;20&amp;quot; /&amp;gt;
            &amp;lt;add key=&amp;quot;maximumClientsToSupportInPool&amp;quot; value=&amp;quot;1000&amp;quot; /&amp;gt;
            &amp;lt;add key=&amp;quot;magicNumber&amp;quot; value=&amp;quot;7&amp;quot; /&amp;gt;
            &amp;lt;add key=&amp;quot;maximumRetriesToPollClient&amp;quot; value=&amp;quot;3&amp;quot; /&amp;gt;
          &amp;lt;/specialConnectionParameters&amp;gt;
        &amp;lt;/connection&amp;gt;
&lt;/pre&gt;
&lt;hr /&gt;

&lt;h2&gt;Summary&lt;/h2&gt;&lt;b&gt;Type:&lt;/b&gt; Internal Class&lt;br /&gt;&lt;b&gt;Namespace / Package:&lt;/b&gt; Aquiles.Connection.Pooling&lt;br /&gt;&lt;b&gt;All implemented interfaces:&lt;/b&gt; &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Connection.Pooling.IConnectionPool&amp;referringTitle=Aquiles.Connection.Pooling.SizeControlledConnectionPool"&gt;Aquiles.Connection.Pooling.IConnectionPool&lt;/a&gt;&lt;br /&gt;&lt;b&gt;All extended interfaces:&lt;/b&gt; None&lt;br /&gt;&lt;b&gt;All extended classes:&lt;/b&gt; Dont apply&lt;br /&gt;&lt;b&gt;Direct Known interfaces:&lt;/b&gt; None&lt;br /&gt;&lt;b&gt;Direct Known classes:&lt;/b&gt; None
&lt;hr /&gt;

&lt;h2&gt;Constructors&lt;/h2&gt;No public constructor available
&lt;hr /&gt;

&lt;h2&gt;Properties from &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Connection.Pooling.IConnectionPool&amp;referringTitle=Aquiles.Connection.Pooling.SizeControlledConnectionPool"&gt;Aquiles.Connection.Pooling.IConnectionPool&lt;/a&gt;&lt;/h2&gt;&lt;blockquote&gt;&lt;blockquote&gt;public string Name&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;public Aquiles.Connection.Endpoint.IEndpointManager EndpointManager&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;public Aquiles.Connection.Factory.IConnectionFactory ConnectionFactory&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;public Aquiles.Configuration.SpecialConnectionParameterCollection SpecialConnectionParameters&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;hr /&gt;

&lt;h2&gt;Methods  from &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Connection.Pooling.IConnectionPool&amp;referringTitle=Aquiles.Connection.Pooling.SizeControlledConnectionPool"&gt;Aquiles.Connection.Pooling.IConnectionPool&lt;/a&gt;&lt;/h2&gt;&lt;blockquote&gt;&lt;blockquote&gt;public void Initialize()&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;public Aquiles.Model.Internal.CassandraClient Borrow()&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;public void Release(Aquiles.Model.Internal.CassandraClient cassandraClient)&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;public void Invalidate(Aquiles.Model.Internal.CassandraClient cassandraClient)&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>javiercanillas</author><pubDate>Thu, 19 Jan 2012 16:40:15 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Aquiles.Connection.Pooling.SizeControlledConnectionPool 20120119044015P</guid></item><item><title>Updated Wiki: Aquiles.VersionHistory</title><link>http://aquiles.codeplex.com/wikipage?title=Aquiles.VersionHistory&amp;version=22</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Version History&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Planning changes&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;using individual pools for each Keyspace connected from a cluster, doing so we avoid a roundtrip to set such keyspace on the connection before using it.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;v1.0.0.1&lt;/b&gt; &amp;amp; &lt;b&gt;v0.7.0.9&lt;/b&gt; &amp;amp; &lt;b&gt;v0.8.0.2&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Fixed &lt;a href="http://aquiles.codeplex.com/workitem/14650"&gt;When a node is down, and then restarted it will swap between blacklist and available list&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;v1.0.0.0&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;added support for Cassandra 1.0.X versions.&lt;/li&gt;
&lt;li&gt;default unixtimestamp multipied by 1000 to standarize with cassandra-cli.&lt;/li&gt;
&lt;li&gt;moved previous version to use inner Thrift generated Cassandra classes instead of external assemblies.&lt;/li&gt;
&lt;li&gt;fix for workitem:14319 &amp;quot;DefaultCluster will attach a non detached connection when executing an ExecutionBlock&amp;quot;&lt;/li&gt;
&lt;li&gt;moved Aquiles for Visual Studio 2010 and fwk 4.0 in order to use its new features.&lt;/li&gt;
&lt;li&gt;moved to use Nuget as dependency version management.&lt;/li&gt;
&lt;li&gt;moved to use Interlocked for better concurrency handling on SizeControlledClientPool.&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;v0.8.0.1&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;added support for Cassandra 0.8.X versions.&lt;/li&gt;
&lt;li&gt;default unixtimestamp multipied by 1000 to standarize with cassandra-cli.&lt;/li&gt;
&lt;li&gt;moved previous version to use inner Thrift generated Cassandra classes instead of external assemblies.&lt;/li&gt;
&lt;li&gt;fix for workitem:14319 &amp;quot;DefaultCluster will attach a non detached connection when executing an ExecutionBlock&amp;quot;&lt;/li&gt;
&lt;li&gt;moved Aquiles for Visual Studio 2010 and fwk 4.0 in order to use its new features.&lt;/li&gt;
&lt;li&gt;moved to use Nuget as dependency version management.&lt;/li&gt;
&lt;li&gt;moved to use Interlocked for better concurrency handling on SizeControlledClientPool.&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;v0.7.0.8&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;default unixtimestamp multipied by 1000 to standarize with cassandra-cli.&lt;/li&gt;
&lt;li&gt;moved previous version to use inner Thrift generated Cassandra classes instead of external assemblies.&lt;/li&gt;
&lt;li&gt;fix for workitem:14319 &amp;quot;DefaultCluster will attach a non detached connection when executing an ExecutionBlock&amp;quot;&lt;/li&gt;
&lt;li&gt;moved Aquiles for Visual Studio 2010 and fwk 4.0 in order to use its new features.&lt;/li&gt;
&lt;li&gt;moved to use Nuget as dependency version management.&lt;/li&gt;
&lt;li&gt;moved to use Interlocked for better concurrency handling on SizeControlledClientPool.&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;v.0.7.0.6&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;Added AquilesKeyRange the properties: StartToken and EndToken&lt;/li&gt;
&lt;li&gt;Changed the converter to support these new properties&lt;/li&gt;
&lt;li&gt;Added a GetKeyRangeSliceCommandTest method to test this new approach.&lt;/li&gt;
&lt;li&gt;2 new encoders for Long (Big-Endian and Little-Endian). Please use these if you need to use the columns for second indexes. Use Big-Endian implementations for most of Cassandra versions, since Java default implementation of Long to ByteArray (and viceversa) is Big-Endian.&lt;/li&gt;
&lt;li&gt;moved Logging namespace to Diagnostics&lt;/li&gt;
&lt;li&gt;Added an Interface to support MonitoringFeatures (like time on borrows, releases, quantity of active connections, inactive connections and so on)&lt;/li&gt;
&lt;li&gt;Added a Helper to support the above feature internally&lt;/li&gt;
&lt;li&gt;Added a new property on the configuration section to be able to add your own implementation of IMonitorFeatures to log such information&lt;/li&gt;
&lt;li&gt;Added a whole new project that use PerformanceCounterHelper (see http://perfmoncounterhelper.codeplex.com) to submit the collected features values into Performance Counter.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;v0.7.0.5&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;fix &lt;a href="http://aquiles.codeplex.com/workitem/12796"&gt;GetKeyRangeSliceCommand doesn&amp;#39;t support for empty Start and End Key&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Also fix that AquilesTokenRange structure to match Cassandra structure&lt;/li&gt;
&lt;li&gt;Modified RetrieveKeyspaceDistributionComand to return a list of AquilesTokenRange.&lt;/li&gt;
&lt;li&gt;added KeyspaceConnectionPool to avoid 1 roundtrip to Cassandra Cluster. Still on test!!!&lt;/li&gt;
&lt;li&gt;fix &lt;a href="http://aquiles.codeplex.com/workitem/12809"&gt;AquilesColumn has TTL as required, but it is optional in Cassandra&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;fix &lt;a href="http://aquiles.codeplex.com/workitem/12869"&gt;UnavailableException and TimedOutException is not meaning of connection broken&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;0.7.0.4&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;added a new ColumnFamily with TimeUUID comparator.&lt;/li&gt;
&lt;li&gt;SizeControlledConnectionPool: now throws an exception if the cluster has no valid endpoints when creating a new connection&lt;/li&gt;
&lt;li&gt;DefaultAquilesCluster: taking out the validation on the endpoints to assure they al point to the same cluster due to some problems when 1 endpoint is taken down after creating connection pool.&lt;/li&gt;
&lt;li&gt;Added support for &amp;quot;get&lt;i&gt;indexed&lt;/i&gt;slices&amp;quot; that let you do a search with some conditions.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;0.7.0.3&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;Added Validation for TTL of Columns when inserting a column&lt;/li&gt;
&lt;li&gt;Added DateTimePrecise from http://www.codeproject.com/KB/cs/DateTimePrecise.aspx?display=Print to properly generate random Guid based on a more precise time data.&lt;/li&gt;
&lt;li&gt;Added a UUIDEncoderHelper that actually works with dotnet GUID but it converts to a byte[] structure compatible with Java UUID.&lt;/li&gt;
&lt;li&gt;Added Test for the above implementations and changes.&lt;/li&gt;
&lt;li&gt;fixed the UnixTimestamp. There was a bu* moved from Cassandra 0.7-beta2 to 0.7-beta2&lt;/li&gt;
&lt;li&gt;moved from thrift 0.2 to 0.5&lt;/li&gt;
&lt;li&gt;removed RenameColumnFamilyCommand and RenameKeyspaceCommand since they are not longer supported on Thrift API&lt;/li&gt;
&lt;li&gt;Optional properties on AquilesColumnFamily are now nullable to support default values within Cassandra Server.&lt;/li&gt;
&lt;li&gt;Added support for optional parameters on AquilesColumnFamilyConverterg that the actual DateTime was taken as UTC but the unitStartDateTime was not represented as UTC.&lt;/li&gt;
&lt;li&gt;Extended the TTL validation. It shouldn&amp;#39;t let TTL value equal or below to zero.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;0.7.0.2&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;taken out all the keyspace and columnfamily validation since Cassandra 0.7.0-beta1 work with this on the fly&lt;/li&gt;
&lt;li&gt;Thrift structure converters created.&lt;/li&gt;
&lt;li&gt;changed command logic when creating and updating data to use converters.&lt;/li&gt;
&lt;li&gt;The GetKeyRangeSliceCommand threw a null reference exception when building output response. Fixed by Aaron8498.&lt;/li&gt;
&lt;li&gt;expose CfDef metadata in describe_keyspaces (CASSANDRA-1633)&lt;/li&gt;
&lt;li&gt;rename RackAwareStrategy to OldNetworkTopologyStrategy, RackUnawareStrategy to SimpleStrategy, DatacenterShardStrategy to NetworkTopologyStrategy, AbstractRackAwareSnitch to AbstractNetworkTopologySnitch (CASSANDRA-1392)&lt;/li&gt;
&lt;li&gt;remove keyspace argument from multiget_count (CASSANDRA-1422)&lt;/li&gt;
&lt;li&gt;Add AquilesColumnFamily.DefaultValidationClass (CASSANDRA-891)&lt;/li&gt;
&lt;li&gt;Add DescribeSplitsCommand to support describe_splits&lt;/li&gt;
&lt;li&gt;rename check&lt;i&gt;schema&lt;/i&gt;agreement to describe&lt;i&gt;schema&lt;/i&gt;versions (CASSANDRA-1478)&lt;/li&gt;
&lt;li&gt;min, max compaction threshold are now configurable and persistent per-ColumnFamily (CASSANDRA-1468) (AquilesColumnFamily.MinimumCompactationThreshold and AquilesColumnFamily.MaximumCompactationThreshold)&lt;/li&gt;
&lt;li&gt;Removed Clock structure (CASSANDRA-1501)&lt;/li&gt;
&lt;li&gt;Added DescribeSnitchCommand to support new method describe_snitch in Thrift API (CASSANDRA-1490)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;v0.7.0.0-beta1&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Added preliminar support for Apache-Cassandra version 0.7-beta1&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;v0.6.4.2
&lt;ul&gt;&lt;li&gt;Moved SuperColumn Name and Columns names and values into Byte[]. Doing so, predicates and everything related to them are moved to Byte[] too. This will enable users to work with Long, TimeUUID and even Serializable Objects than can be converted into a Byte[].&lt;/li&gt;
&lt;li&gt;Added some useful EncoderHelpers in order to help clients to overcode this big change.&lt;/li&gt;
&lt;li&gt;Added more helpful methods and class comments.&lt;/li&gt;
&lt;li&gt;GetKeyRangeSliceCommand will now output a list of GetKeyRangeSliceCommand.Out class that now has the Key as property.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;v0.6.4.1
&lt;ul&gt;&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/workitem/11744"&gt;BatchMutateCommand with SuperColumns over a Standard ColumnFamily&lt;/a&gt; fixed&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/workitem/11745"&gt;MultiGetSliceCommand without SuperColumn over a Super ColumnFamily Type&lt;/a&gt; fixed&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;v0.6.4.0
&lt;ul&gt;&lt;li&gt;Added support for Apache Cassandra version 0.6.4.0&lt;/li&gt;
&lt;li&gt;Added support for the new method &amp;quot;describe_partitioner&amp;quot; through a new command called &amp;quot;RetrievePartitionerCommand&amp;quot;&lt;/li&gt;
&lt;li&gt;Added an static method called &amp;quot;RetrieveInformation&amp;quot; to &amp;quot;AquilesHelper&amp;quot; so you can get the configuration parameters of each cluster (local config and remote config)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;v0.6.3.0
&lt;ul&gt;&lt;li&gt;Added support for Apache Cassandra version 0.6.3.0&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;v0.6.2.1
&lt;ul&gt;&lt;li&gt;Change version to match Apache Cassandra version&lt;/li&gt;
&lt;li&gt;Fixed &lt;a href="http://aquiles.codeplex.com/workitem/11456"&gt;DeleteCommand validation exception when column value is null&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;v1.0.0.1
&lt;ul&gt;&lt;li&gt;Fixed &lt;a href="http://aquiles.codeplex.com/workitem/11340"&gt;divide by zero in SizeControlledConnectionPool.controlIdleClientSizeMethod&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;v1.0.0.0
&lt;ul&gt;&lt;li&gt;Initial Release that support Apache Cassandra version 0.6.2&lt;/li&gt;
&lt;li&gt;Connection Pool: to avoid performance and resource problems under heavy traffic. &lt;/li&gt;
&lt;li&gt;Node Balancing for proper distribution of traffic: this will equally distribute the connections to a cluster between all the nodes configured to that cluster.&lt;/li&gt;
&lt;li&gt;Defensive node health check: when the framework detects a node is down, it will ban that node and every X seconds will attempt to connect to it. When this try success then that node is put back in the distrubution list.&lt;/li&gt;
&lt;li&gt;Command Validation: Before attempting to open a connection against a cluster, Aquiles will validate the Command Input (Column, SuperColumn, etc). It even will validate that the ColumnFamily exists within the KeySpace, and that the KeySpace exists within the cluster.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>javiercanillas</author><pubDate>Mon, 16 Jan 2012 18:11:21 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Aquiles.VersionHistory 20120116061121P</guid></item><item><title>Updated Wiki: Aquiles.VersionHistory</title><link>http://aquiles.codeplex.com/wikipage?title=Aquiles.VersionHistory&amp;version=21</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Version History&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Planning changes&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;using individual pools for each Keyspace connected from a cluster, doing so we avoid a roundtrip to set such keyspace on the connection before using it.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;v1.0.0.1&lt;/b&gt; &amp;amp; &lt;b&gt;v0.7.0.9&lt;/b&gt; &amp;amp; &lt;b&gt;v0.8.0.2&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Fixed &lt;a href="http://aquiles.codeplex.com/workitem/14650"&gt;When a node is down, and then restarted it will swap between blacklist and available list&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;v1.0.0.0&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;added support for Cassandra 1.0.X versions.&lt;/li&gt;
&lt;li&gt;default unixtimestamp multipied by 1000 to standarize with cassandra-cli.&lt;/li&gt;
&lt;li&gt;moved previous version to use inner Thrift generated Cassandra classes instead of external assemblies.&lt;/li&gt;
&lt;li&gt;fix for workitem:14319 &amp;quot;DefaultCluster will attach a non detached connection when executing an ExecutionBlock&amp;quot;&lt;/li&gt;
&lt;li&gt;moved Aquiles for Visual Studio 2010 and fwk 4.0 in order to use its new features.&lt;/li&gt;
&lt;li&gt;moved to use Nuget as dependency version management.&lt;/li&gt;
&lt;li&gt;moved to use Interlocked for better concurrency handling on SizeControlledClientPool.&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;v0.8.0.1&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;added support for Cassandra 0.8.X versions.&lt;/li&gt;
&lt;li&gt;default unixtimestamp multipied by 1000 to standarize with cassandra-cli.&lt;/li&gt;
&lt;li&gt;moved previous version to use inner Thrift generated Cassandra classes instead of external assemblies.&lt;/li&gt;
&lt;li&gt;fix for workitem:14319 &amp;quot;DefaultCluster will attach a non detached connection when executing an ExecutionBlock&amp;quot;&lt;/li&gt;
&lt;li&gt;moved Aquiles for Visual Studio 2010 and fwk 4.0 in order to use its new features.&lt;/li&gt;
&lt;li&gt;moved to use Nuget as dependency version management.&lt;/li&gt;
&lt;li&gt;moved to use Interlocked for better concurrency handling on SizeControlledClientPool.&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;v0.7.0.8&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;default unixtimestamp multipied by 1000 to standarize with cassandra-cli.&lt;/li&gt;
&lt;li&gt;moved previous version to use inner Thrift generated Cassandra classes instead of external assemblies.&lt;/li&gt;
&lt;li&gt;fix for workitem:14319 &amp;quot;DefaultCluster will attach a non detached connection when executing an ExecutionBlock&amp;quot;&lt;/li&gt;
&lt;li&gt;moved Aquiles for Visual Studio 2010 and fwk 4.0 in order to use its new features.&lt;/li&gt;
&lt;li&gt;moved to use Nuget as dependency version management.&lt;/li&gt;
&lt;li&gt;moved to use Interlocked for better concurrency handling on SizeControlledClientPool.&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;v.0.7.0.6&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;Added AquilesKeyRange the properties: StartToken and EndToken&lt;/li&gt;
&lt;li&gt;Changed the converter to support these new properties&lt;/li&gt;
&lt;li&gt;Added a GetKeyRangeSliceCommandTest method to test this new approach.&lt;/li&gt;
&lt;li&gt;2 new encoders for Long (Big-Endian and Little-Endian). Please use these if you need to use the columns for second indexes. Use Big-Endian implementations for most of Cassandra versions, since Java default implementation of Long to ByteArray (and viceversa) is Big-Endian.&lt;/li&gt;
&lt;li&gt;moved Logging namespace to Diagnostics&lt;/li&gt;
&lt;li&gt;Added an Interface to support MonitoringFeatures (like time on borrows, releases, quantity of active connections, inactive connections and so on)&lt;/li&gt;
&lt;li&gt;Added a Helper to support the above feature internally&lt;/li&gt;
&lt;li&gt;Added a new property on the configuration section to be able to add your own implementation of IMonitorFeatures to log such information&lt;/li&gt;
&lt;li&gt;Added a whole new project that use PerformanceCounterHelper (see http://perfmoncounterhelper.codeplex.com) to submit the collected features values into Performance Counter.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;v0.7.0.5&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;fix &lt;a href="http://aquiles.codeplex.com/workitem/12796"&gt;GetKeyRangeSliceCommand doesn&amp;#39;t support for empty Start and End Key&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Also fix that AquilesTokenRange structure to match Cassandra structure&lt;/li&gt;
&lt;li&gt;Modified RetrieveKeyspaceDistributionComand to return a list of AquilesTokenRange.&lt;/li&gt;
&lt;li&gt;added KeyspaceConnectionPool to avoid 1 roundtrip to Cassandra Cluster. Still on test!!!&lt;/li&gt;
&lt;li&gt;fix &lt;a href="http://aquiles.codeplex.com/workitem/12809"&gt;AquilesColumn has TTL as required, but it is optional in Cassandra&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;fix &lt;a href="http://aquiles.codeplex.com/workitem/12869"&gt;UnavailableException and TimedOutException is not meaning of connection broken&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;0.7.0.4&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;added a new ColumnFamily with TimeUUID comparator.&lt;/li&gt;
&lt;li&gt;SizeControlledConnectionPool: now throws an exception if the cluster has no valid endpoints when creating a new connection&lt;/li&gt;
&lt;li&gt;DefaultAquilesCluster: taking out the validation on the endpoints to assure they al point to the same cluster due to some problems when 1 endpoint is taken down after creating connection pool.&lt;/li&gt;
&lt;li&gt;Added support for &amp;quot;get&lt;i&gt;indexed&lt;/i&gt;slices&amp;quot; that let you do a search with some conditions.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;0.7.0.3&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;Added Validation for TTL of Columns when inserting a column&lt;/li&gt;
&lt;li&gt;Added DateTimePrecise from http://www.codeproject.com/KB/cs/DateTimePrecise.aspx?display=Print to properly generate random Guid based on a more precise time data.&lt;/li&gt;
&lt;li&gt;Added a UUIDEncoderHelper that actually works with dotnet GUID but it converts to a byte[] structure compatible with Java UUID.&lt;/li&gt;
&lt;li&gt;Added Test for the above implementations and changes.&lt;/li&gt;
&lt;li&gt;fixed the UnixTimestamp. There was a bu* moved from Cassandra 0.7-beta2 to 0.7-beta2&lt;/li&gt;
&lt;li&gt;moved from thrift 0.2 to 0.5&lt;/li&gt;
&lt;li&gt;removed RenameColumnFamilyCommand and RenameKeyspaceCommand since they are not longer supported on Thrift API&lt;/li&gt;
&lt;li&gt;Optional properties on AquilesColumnFamily are now nullable to support default values within Cassandra Server.&lt;/li&gt;
&lt;li&gt;Added support for optional parameters on AquilesColumnFamilyConverterg that the actual DateTime was taken as UTC but the unitStartDateTime was not represented as UTC.&lt;/li&gt;
&lt;li&gt;Extended the TTL validation. It shouldn&amp;#39;t let TTL value equal or below to zero.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;0.7.0.2&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;taken out all the keyspace and columnfamily validation since Cassandra 0.7.0-beta1 work with this on the fly&lt;/li&gt;
&lt;li&gt;Thrift structure converters created.&lt;/li&gt;
&lt;li&gt;changed command logic when creating and updating data to use converters.&lt;/li&gt;
&lt;li&gt;The GetKeyRangeSliceCommand threw a null reference exception when building output response. Fixed by Aaron8498.&lt;/li&gt;
&lt;li&gt;expose CfDef metadata in describe_keyspaces (CASSANDRA-1633)&lt;/li&gt;
&lt;li&gt;rename RackAwareStrategy to OldNetworkTopologyStrategy, RackUnawareStrategy to SimpleStrategy, DatacenterShardStrategy to NetworkTopologyStrategy, AbstractRackAwareSnitch to AbstractNetworkTopologySnitch (CASSANDRA-1392)&lt;/li&gt;
&lt;li&gt;remove keyspace argument from multiget_count (CASSANDRA-1422)&lt;/li&gt;
&lt;li&gt;Add AquilesColumnFamily.DefaultValidationClass (CASSANDRA-891)&lt;/li&gt;
&lt;li&gt;Add DescribeSplitsCommand to support describe_splits&lt;/li&gt;
&lt;li&gt;rename check&lt;i&gt;schema&lt;/i&gt;agreement to describe&lt;i&gt;schema&lt;/i&gt;versions (CASSANDRA-1478)&lt;/li&gt;
&lt;li&gt;min, max compaction threshold are now configurable and persistent per-ColumnFamily (CASSANDRA-1468) (AquilesColumnFamily.MinimumCompactationThreshold and AquilesColumnFamily.MaximumCompactationThreshold)&lt;/li&gt;
&lt;li&gt;Removed Clock structure (CASSANDRA-1501)&lt;/li&gt;
&lt;li&gt;Added DescribeSnitchCommand to support new method describe_snitch in Thrift API (CASSANDRA-1490)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;v0.7.0.0-beta1&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Added preliminar support for Apache-Cassandra version 0.7-beta1&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;v0.6.4.2
&lt;ul&gt;&lt;li&gt;Moved SuperColumn Name and Columns names and values into Byte[]. Doing so, predicates and everything related to them are moved to Byte[] too. This will enable users to work with Long, TimeUUID and even Serializable Objects than can be converted into a Byte[].&lt;/li&gt;
&lt;li&gt;Added some useful EncoderHelpers in order to help clients to overcode this big change.&lt;/li&gt;
&lt;li&gt;Added more helpful methods and class comments.&lt;/li&gt;
&lt;li&gt;GetKeyRangeSliceCommand will now output a list of GetKeyRangeSliceCommand.Out class that now has the Key as property.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;v0.6.4.1
&lt;ul&gt;&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/workitem/11744"&gt;BatchMutateCommand with SuperColumns over a Standard ColumnFamily&lt;/a&gt; fixed&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/workitem/11745"&gt;MultiGetSliceCommand without SuperColumn over a Super ColumnFamily Type&lt;/a&gt; fixed&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;v0.6.4.0
&lt;ul&gt;&lt;li&gt;Added support for Apache Cassandra version 0.6.4.0&lt;/li&gt;
&lt;li&gt;Added support for the new method &amp;quot;describe_partitioner&amp;quot; through a new command called &amp;quot;RetrievePartitionerCommand&amp;quot;&lt;/li&gt;
&lt;li&gt;Added an static method called &amp;quot;RetrieveInformation&amp;quot; to &amp;quot;AquilesHelper&amp;quot; so you can get the configuration parameters of each cluster (local config and remote config)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;v0.6.3.0
&lt;ul&gt;&lt;li&gt;Added support for Apache Cassandra version 0.6.3.0&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;v0.6.2.1
&lt;ul&gt;&lt;li&gt;Change version to match Apache Cassandra version&lt;/li&gt;
&lt;li&gt;Fixed &lt;a href="http://aquiles.codeplex.com/workitem/11456"&gt;DeleteCommand validation exception when column value is null&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;v1.0.0.1
&lt;ul&gt;&lt;li&gt;Fixed &lt;a href="http://aquiles.codeplex.com/workitem/11340"&gt;divide by zero in SizeControlledConnectionPool.controlIdleClientSizeMethod&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;v1.0.0.0
&lt;ul&gt;&lt;li&gt;Initial Release that support Apache Cassandra version 0.6.2&lt;/li&gt;
&lt;li&gt;Connection Pool: to avoid performance and resource problems under heavy traffic. &lt;/li&gt;
&lt;li&gt;Node Balancing for proper distribution of traffic: this will equally distribute the connections to a cluster between all the nodes configured to that cluster.&lt;/li&gt;
&lt;li&gt;Defensive node health check: when the framework detects a node is down, it will ban that node and every X seconds will attempt to connect to it. When this try success then that node is put back in the distrubution list.&lt;/li&gt;
&lt;li&gt;Command Validation: Before attempting to open a connection against a cluster, Aquiles will validate the Command Input (Column, SuperColumn, etc). It even will validate that the ColumnFamily exists within the KeySpace, and that the KeySpace exists within the cluster.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>javiercanillas</author><pubDate>Mon, 16 Jan 2012 18:03:05 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Aquiles.VersionHistory 20120116060305P</guid></item><item><title>Updated Wiki: Aquiles.VersionHistory</title><link>http://aquiles.codeplex.com/wikipage?title=Aquiles.VersionHistory&amp;version=20</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Version History&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Planning changes&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;using individual pools for each Keyspace connected from a cluster, doing so we avoid a roundtrip to set such keyspace on the connection before using it.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;v1.0.0.1&lt;/b&gt; &amp;amp; &lt;b&gt;v0.7.0.9 &amp;amp; &lt;/b&gt;v0.8.0.2*&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/workitem/14650"&gt;When a node is down, and then restarted it will swap between blacklist and available list&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;v1.0.0.0&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;added support for Cassandra 1.0.X versions.&lt;/li&gt;
&lt;li&gt;default unixtimestamp multipied by 1000 to standarize with cassandra-cli.&lt;/li&gt;
&lt;li&gt;moved previous version to use inner Thrift generated Cassandra classes instead of external assemblies.&lt;/li&gt;
&lt;li&gt;fix for workitem:14319 &amp;quot;DefaultCluster will attach a non detached connection when executing an ExecutionBlock&amp;quot;&lt;/li&gt;
&lt;li&gt;moved Aquiles for Visual Studio 2010 and fwk 4.0 in order to use its new features.&lt;/li&gt;
&lt;li&gt;moved to use Nuget as dependency version management.&lt;/li&gt;
&lt;li&gt;moved to use Interlocked for better concurrency handling on SizeControlledClientPool.&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;v0.8.0.1&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;added support for Cassandra 0.8.X versions.&lt;/li&gt;
&lt;li&gt;default unixtimestamp multipied by 1000 to standarize with cassandra-cli.&lt;/li&gt;
&lt;li&gt;moved previous version to use inner Thrift generated Cassandra classes instead of external assemblies.&lt;/li&gt;
&lt;li&gt;fix for workitem:14319 &amp;quot;DefaultCluster will attach a non detached connection when executing an ExecutionBlock&amp;quot;&lt;/li&gt;
&lt;li&gt;moved Aquiles for Visual Studio 2010 and fwk 4.0 in order to use its new features.&lt;/li&gt;
&lt;li&gt;moved to use Nuget as dependency version management.&lt;/li&gt;
&lt;li&gt;moved to use Interlocked for better concurrency handling on SizeControlledClientPool.&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;v0.7.0.8&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;default unixtimestamp multipied by 1000 to standarize with cassandra-cli.&lt;/li&gt;
&lt;li&gt;moved previous version to use inner Thrift generated Cassandra classes instead of external assemblies.&lt;/li&gt;
&lt;li&gt;fix for workitem:14319 &amp;quot;DefaultCluster will attach a non detached connection when executing an ExecutionBlock&amp;quot;&lt;/li&gt;
&lt;li&gt;moved Aquiles for Visual Studio 2010 and fwk 4.0 in order to use its new features.&lt;/li&gt;
&lt;li&gt;moved to use Nuget as dependency version management.&lt;/li&gt;
&lt;li&gt;moved to use Interlocked for better concurrency handling on SizeControlledClientPool.&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;v.0.7.0.6&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;Added AquilesKeyRange the properties: StartToken and EndToken&lt;/li&gt;
&lt;li&gt;Changed the converter to support these new properties&lt;/li&gt;
&lt;li&gt;Added a GetKeyRangeSliceCommandTest method to test this new approach.&lt;/li&gt;
&lt;li&gt;2 new encoders for Long (Big-Endian and Little-Endian). Please use these if you need to use the columns for second indexes. Use Big-Endian implementations for most of Cassandra versions, since Java default implementation of Long to ByteArray (and viceversa) is Big-Endian.&lt;/li&gt;
&lt;li&gt;moved Logging namespace to Diagnostics&lt;/li&gt;
&lt;li&gt;Added an Interface to support MonitoringFeatures (like time on borrows, releases, quantity of active connections, inactive connections and so on)&lt;/li&gt;
&lt;li&gt;Added a Helper to support the above feature internally&lt;/li&gt;
&lt;li&gt;Added a new property on the configuration section to be able to add your own implementation of IMonitorFeatures to log such information&lt;/li&gt;
&lt;li&gt;Added a whole new project that use PerformanceCounterHelper (see http://perfmoncounterhelper.codeplex.com) to submit the collected features values into Performance Counter.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;v0.7.0.5&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;fix &lt;a href="http://aquiles.codeplex.com/workitem/12796"&gt;GetKeyRangeSliceCommand doesn&amp;#39;t support for empty Start and End Key&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Also fix that AquilesTokenRange structure to match Cassandra structure&lt;/li&gt;
&lt;li&gt;Modified RetrieveKeyspaceDistributionComand to return a list of AquilesTokenRange.&lt;/li&gt;
&lt;li&gt;added KeyspaceConnectionPool to avoid 1 roundtrip to Cassandra Cluster. Still on test!!!&lt;/li&gt;
&lt;li&gt;fix &lt;a href="http://aquiles.codeplex.com/workitem/12809"&gt;AquilesColumn has TTL as required, but it is optional in Cassandra&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;fix &lt;a href="http://aquiles.codeplex.com/workitem/12869"&gt;UnavailableException and TimedOutException is not meaning of connection broken&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;0.7.0.4&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;added a new ColumnFamily with TimeUUID comparator.&lt;/li&gt;
&lt;li&gt;SizeControlledConnectionPool: now throws an exception if the cluster has no valid endpoints when creating a new connection&lt;/li&gt;
&lt;li&gt;DefaultAquilesCluster: taking out the validation on the endpoints to assure they al point to the same cluster due to some problems when 1 endpoint is taken down after creating connection pool.&lt;/li&gt;
&lt;li&gt;Added support for &amp;quot;get&lt;i&gt;indexed&lt;/i&gt;slices&amp;quot; that let you do a search with some conditions.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;0.7.0.3&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;Added Validation for TTL of Columns when inserting a column&lt;/li&gt;
&lt;li&gt;Added DateTimePrecise from http://www.codeproject.com/KB/cs/DateTimePrecise.aspx?display=Print to properly generate random Guid based on a more precise time data.&lt;/li&gt;
&lt;li&gt;Added a UUIDEncoderHelper that actually works with dotnet GUID but it converts to a byte[] structure compatible with Java UUID.&lt;/li&gt;
&lt;li&gt;Added Test for the above implementations and changes.&lt;/li&gt;
&lt;li&gt;fixed the UnixTimestamp. There was a bu* moved from Cassandra 0.7-beta2 to 0.7-beta2&lt;/li&gt;
&lt;li&gt;moved from thrift 0.2 to 0.5&lt;/li&gt;
&lt;li&gt;removed RenameColumnFamilyCommand and RenameKeyspaceCommand since they are not longer supported on Thrift API&lt;/li&gt;
&lt;li&gt;Optional properties on AquilesColumnFamily are now nullable to support default values within Cassandra Server.&lt;/li&gt;
&lt;li&gt;Added support for optional parameters on AquilesColumnFamilyConverterg that the actual DateTime was taken as UTC but the unitStartDateTime was not represented as UTC.&lt;/li&gt;
&lt;li&gt;Extended the TTL validation. It shouldn&amp;#39;t let TTL value equal or below to zero.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;0.7.0.2&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;taken out all the keyspace and columnfamily validation since Cassandra 0.7.0-beta1 work with this on the fly&lt;/li&gt;
&lt;li&gt;Thrift structure converters created.&lt;/li&gt;
&lt;li&gt;changed command logic when creating and updating data to use converters.&lt;/li&gt;
&lt;li&gt;The GetKeyRangeSliceCommand threw a null reference exception when building output response. Fixed by Aaron8498.&lt;/li&gt;
&lt;li&gt;expose CfDef metadata in describe_keyspaces (CASSANDRA-1633)&lt;/li&gt;
&lt;li&gt;rename RackAwareStrategy to OldNetworkTopologyStrategy, RackUnawareStrategy to SimpleStrategy, DatacenterShardStrategy to NetworkTopologyStrategy, AbstractRackAwareSnitch to AbstractNetworkTopologySnitch (CASSANDRA-1392)&lt;/li&gt;
&lt;li&gt;remove keyspace argument from multiget_count (CASSANDRA-1422)&lt;/li&gt;
&lt;li&gt;Add AquilesColumnFamily.DefaultValidationClass (CASSANDRA-891)&lt;/li&gt;
&lt;li&gt;Add DescribeSplitsCommand to support describe_splits&lt;/li&gt;
&lt;li&gt;rename check&lt;i&gt;schema&lt;/i&gt;agreement to describe&lt;i&gt;schema&lt;/i&gt;versions (CASSANDRA-1478)&lt;/li&gt;
&lt;li&gt;min, max compaction threshold are now configurable and persistent per-ColumnFamily (CASSANDRA-1468) (AquilesColumnFamily.MinimumCompactationThreshold and AquilesColumnFamily.MaximumCompactationThreshold)&lt;/li&gt;
&lt;li&gt;Removed Clock structure (CASSANDRA-1501)&lt;/li&gt;
&lt;li&gt;Added DescribeSnitchCommand to support new method describe_snitch in Thrift API (CASSANDRA-1490)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;v0.7.0.0-beta1&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Added preliminar support for Apache-Cassandra version 0.7-beta1&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;v0.6.4.2
&lt;ul&gt;&lt;li&gt;Moved SuperColumn Name and Columns names and values into Byte[]. Doing so, predicates and everything related to them are moved to Byte[] too. This will enable users to work with Long, TimeUUID and even Serializable Objects than can be converted into a Byte[].&lt;/li&gt;
&lt;li&gt;Added some useful EncoderHelpers in order to help clients to overcode this big change.&lt;/li&gt;
&lt;li&gt;Added more helpful methods and class comments.&lt;/li&gt;
&lt;li&gt;GetKeyRangeSliceCommand will now output a list of GetKeyRangeSliceCommand.Out class that now has the Key as property.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;v0.6.4.1
&lt;ul&gt;&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/workitem/11744"&gt;BatchMutateCommand with SuperColumns over a Standard ColumnFamily&lt;/a&gt; fixed&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/workitem/11745"&gt;MultiGetSliceCommand without SuperColumn over a Super ColumnFamily Type&lt;/a&gt; fixed&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;v0.6.4.0
&lt;ul&gt;&lt;li&gt;Added support for Apache Cassandra version 0.6.4.0&lt;/li&gt;
&lt;li&gt;Added support for the new method &amp;quot;describe_partitioner&amp;quot; through a new command called &amp;quot;RetrievePartitionerCommand&amp;quot;&lt;/li&gt;
&lt;li&gt;Added an static method called &amp;quot;RetrieveInformation&amp;quot; to &amp;quot;AquilesHelper&amp;quot; so you can get the configuration parameters of each cluster (local config and remote config)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;v0.6.3.0
&lt;ul&gt;&lt;li&gt;Added support for Apache Cassandra version 0.6.3.0&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;v0.6.2.1
&lt;ul&gt;&lt;li&gt;Change version to match Apache Cassandra version&lt;/li&gt;
&lt;li&gt;Fixed &lt;a href="http://aquiles.codeplex.com/workitem/11456"&gt;DeleteCommand validation exception when column value is null&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;v1.0.0.1
&lt;ul&gt;&lt;li&gt;Fixed &lt;a href="http://aquiles.codeplex.com/workitem/11340"&gt;divide by zero in SizeControlledConnectionPool.controlIdleClientSizeMethod&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;v1.0.0.0
&lt;ul&gt;&lt;li&gt;Initial Release that support Apache Cassandra version 0.6.2&lt;/li&gt;
&lt;li&gt;Connection Pool: to avoid performance and resource problems under heavy traffic. &lt;/li&gt;
&lt;li&gt;Node Balancing for proper distribution of traffic: this will equally distribute the connections to a cluster between all the nodes configured to that cluster.&lt;/li&gt;
&lt;li&gt;Defensive node health check: when the framework detects a node is down, it will ban that node and every X seconds will attempt to connect to it. When this try success then that node is put back in the distrubution list.&lt;/li&gt;
&lt;li&gt;Command Validation: Before attempting to open a connection against a cluster, Aquiles will validate the Command Input (Column, SuperColumn, etc). It even will validate that the ColumnFamily exists within the KeySpace, and that the KeySpace exists within the cluster.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>javiercanillas</author><pubDate>Mon, 16 Jan 2012 18:02:46 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Aquiles.VersionHistory 20120116060246P</guid></item><item><title>Updated Wiki: Home</title><link>http://aquiles.codeplex.com/wikipage?version=62</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;&lt;b&gt;&lt;u&gt;News&lt;/u&gt;&lt;/b&gt;&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;Check download section, new support for 1.0. Documentation still not updated, it will be soon.&lt;/li&gt;
&lt;li&gt;Follow us on tweeter to get updates &lt;b&gt;@Aquiles4Net&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Description&lt;/h1&gt;
Aquiles is a .NET (v3.5 or above) Client for &lt;a href="http://cassandra.apache.org/" class="externalLink"&gt;Apache Cassandra&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; version 0.6.X or above using &lt;a href="http://wiki.apache.org/cassandra/API" class="externalLink"&gt;Thrift API&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Basically, It adds:
&lt;ul&gt;&lt;li&gt;A &lt;b&gt;.NET friendly interface&lt;/b&gt; to cassandra operations. You operates against cassandra as you would operate against an SQL (See examples)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Connection Pool&lt;/b&gt; with warm-up and size control capabilities&lt;/li&gt;
&lt;li&gt;An &lt;b&gt;Endpoint Manager&lt;/b&gt; to manage all the entrypoint nodes to one cluster. It will automatically &lt;b&gt;distribute the connections against all the cluster endpoints&lt;/b&gt; defined, and will &lt;b&gt;check for healthiness&lt;/b&gt; of the nodes with a defensive node health check strategy.&lt;/li&gt;
&lt;li&gt;Command parameter Validation:&lt;/li&gt;
&lt;li&gt;a &lt;b&gt;simple and user-friendly configuration section&lt;/b&gt; to configure all your clusters and support for &lt;b&gt;dependency-injection frameworks&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;You &lt;b&gt;can handle more than 1 cluster&lt;/b&gt; in your application &lt;/li&gt;
&lt;li&gt;You can configure what &lt;b&gt;ConnectionPool&lt;/b&gt; you want to use and its &lt;b&gt;internal parameters&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;You can choose what &lt;b&gt;EndpointManager&lt;/b&gt; you want to use&lt;/li&gt;
&lt;li&gt;You can &lt;b&gt;choose what Transport do you want to use&lt;/b&gt;, and even when using TBufferedTransport you can set the length of the buffer!&lt;/li&gt;
&lt;li&gt;You can managed (add, modify, remove) your Keyspaces and ColumnFamilies&lt;/li&gt;
&lt;li&gt;Some &lt;b&gt;Byte Enconder Helpers to avoid the need to create and managed your own&lt;/b&gt; (Long, UTF8, ASCII, GUID, UUID, Long, Int and so on).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Monitor features out of the box, now you can monitor all your connections to Cassandra simply by using Performance Monitor (native with Windows)&lt;/b&gt; by implementing &lt;a href="http://perfmoncounterhelper.codeplex.com" class="externalLink"&gt;PerformanceCounterHelper fwk&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; (*). Take the following screenshot as an example:&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=Aquiles&amp;DownloadId=226455" alt="Monitor.jpg" title="Monitor.jpg" /&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;Instructions on how to enable this feature are in &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Diagnostic.Extension&amp;referringTitle=Home"&gt;Aquiles.Diagnostic.Extension&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;(*) This feature was disabled on last refactor, it will be enabled back again soon.&lt;br /&gt;&lt;br /&gt;You can take a look at &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.VersionHistory&amp;referringTitle=Home"&gt;Version History&lt;/a&gt; for the lastest updates.
&lt;hr /&gt;

&lt;h1&gt;Commands Supported&lt;/h1&gt;
Aquiles supports all the Cassandra commands. Check &lt;a href="http://wiki.apache.org/cassandra/API" class="externalLink"&gt;Cassandra API&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; on documentation about each one.&lt;br /&gt;
&lt;h1&gt;Easy Example of use&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Example 1&lt;/b&gt;:&lt;/li&gt;&lt;/ul&gt;
Suppose that you have a Cassandra instance configured in your App.Confg or Web.Config, and you named it &amp;quot;Cassandra1&amp;quot;. Suppose then, that there is a Keyspace called &amp;quot;TestKeyspace&amp;quot; and within that KeySpace there is a ColumnFamily called &amp;quot;TestColumnFamily&amp;quot;.&lt;br /&gt;Now, lets presume that you need to insert a new key &amp;quot;testKey&amp;quot; with a new Column called &amp;quot;testColumn&amp;quot; with a value of &amp;quot;testValue&amp;quot;. You may acomplish that with the following code.&lt;br /&gt;&lt;pre&gt;
string columnFamily = &amp;quot;TestColumnFamily&amp;quot;;
string keyspace = &amp;quot;TestKeyspace&amp;quot;;
string key = &amp;quot;testKey&amp;quot;;
string columnName = &amp;quot;testColumn&amp;quot;;
string columnValue = &amp;quot;testValue&amp;quot;;

// Insert statement
byte[] key = ByteEncoderHelper.LongEncoder.ToByteArray(i);
ColumnParent columnParent = new ColumnParent();
Column column = new Column() {
    Name = ByteEncoderHelper.UTF8Encoder.ToByteArray(columnName),
    Timestamp = UnixHelper.UnixTimestamp,
    Value = ByteEncoderHelper.UTF8Encoder.ToByteArray(columnValue),
};

columnParent.Column_family = columnFamily;

ICluster cluster = AquilesHelper.RetrieveCluster(&amp;quot;Cassandra1&amp;quot;);
cluster.Execute(new ExecutionBlock(delegate(CassandraClient client) {
    client.insert(key, columnParent, column, ConsistencyLevel.ONE);
    return null;
}), keyspace);

&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Example 2&lt;/b&gt;:&lt;/li&gt;&lt;/ul&gt;
Now, Lets continue with the assumption of the Example1 and that you need to retrieve the value inserted. Your code would be similar to:&lt;br /&gt;&lt;pre&gt;
// Get statement
byte[] key = ByteEncoderHelper.LongEncoder.ToByteArray(2);
ColumnPath columnPath = new ColumnPath()
{
    Column = ByteEncoderHelper.UTF8Encoder.ToByteArray(columnName),
    Column_family = columnFamily,
};
ICluster cluster = AquilesHelper.RetrieveCluster(&amp;quot;Cassandra1&amp;quot;);
object rtnValue = cluster.Execute(new ExecutionBlock(delegate(CassandraClient client)
{
    return client.get(key, columnPath, ConsistencyLevel.ONE);
}), keyspace);
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As you see, using this client is, somehow, like using a connection to a Database (Cassandra is not a database, but the syntax is similar). More examples can be found at each command.&lt;br /&gt;
&lt;h1&gt;Aquiles Configuration Section&lt;/h1&gt;Configuring Aquiles to use a Cassandra cluster is easy, add the following section into your App.Config (Web.config in case of ASPNET application):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;configuration&amp;gt;
  &amp;lt;configSections&amp;gt;
    &amp;lt;section name=&amp;quot;aquilesConfiguration&amp;quot; type=&amp;quot;Aquiles.Core.Configuration.AquilesConfigurationSection,Aquiles.Core&amp;quot;/&amp;gt;
  &amp;lt;/configSections&amp;gt;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; That the section name must be &amp;#39;&amp;#39;aquilesConfiguration&amp;#39;&amp;#39; and no other, or you Aquiles will not load and will throw a ConfigurationException when first time used.&lt;br /&gt;&lt;br /&gt;After that, you will only need to configure your cluster&amp;#39;s information like following:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
 &amp;lt;aquilesConfiguration&amp;gt;
    &amp;lt;clusters&amp;gt;
      &amp;lt;add friendlyName=&amp;quot;Keyspace1&amp;quot;&amp;gt;
        &amp;lt;connection poolType=&amp;quot;SIZECONTROLLEDPOOL&amp;quot; factoryType=&amp;quot;FRAMED&amp;quot;&amp;gt;
        &amp;lt;/connection&amp;gt;
        &amp;lt;endpointManager type=&amp;quot;ROUNDROBIN&amp;quot; defaultTimeout=&amp;quot;6000&amp;quot;&amp;gt;
          &amp;lt;cassandraEndpoints&amp;gt;
            &amp;lt;add address=&amp;quot;localhost&amp;quot; port=&amp;quot;9160&amp;quot;/&amp;gt;
          &amp;lt;/cassandraEndpoints&amp;gt;
        &amp;lt;/endpointManager&amp;gt;
      &amp;lt;/add&amp;gt;
    &amp;lt;/clusters&amp;gt;
  &amp;lt;/aquilesConfiguration&amp;gt;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;For further Configuration options, please see &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Configuration&amp;referringTitle=Home"&gt;Configuring Aquiles&lt;/a&gt;
&lt;hr /&gt;

&lt;h1&gt;Hints, Tricks, Best Practices&lt;/h1&gt;See a list of Hints, Tricks and Best Practices in this &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.BestPractices&amp;referringTitle=Home"&gt;document&lt;/a&gt;.&lt;br /&gt;
&lt;h1&gt;Frequently Asked Questions&lt;/h1&gt;Q: &lt;b&gt;Is this thing production ready?&lt;/b&gt;&lt;br /&gt;A: &lt;b&gt;Yes&lt;/b&gt;, im using it now on a heavy traffic site and it works great.&lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Sure it is production ready?&lt;/b&gt;&lt;br /&gt;A: Well, do a load test and &lt;b&gt;give us feedback&lt;/b&gt;. If you find something wrong, let us know. And if you fix it, consider sharing the code.&lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Are you going to support AVRO?&lt;/b&gt;&lt;br /&gt;A: &lt;b&gt;Maybe&lt;/b&gt;. At this time, the evolution of aquiles is driven by our needs, and we won&amp;#39;t upgrade our cassandra servers until the TTL is on the trunk (or any other compelling feature or killing bug). &lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Hey, it is Achilles!&lt;/b&gt;&lt;br /&gt;A: Well, not for us spanish speaking people. To be fair, it should be &lt;b&gt;Ἀχιλλεύς&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;I&amp;#39;m a bit confuse on your version numbers. How do you choose them?&lt;/b&gt;&lt;br /&gt;A: Well, yeap. I know it&amp;#39;s a bit confusing. Cassandra now have 3 version numbers: Major.Minor.patchLevel. Well, I have added 1 more version lvl to the end in order to properly detect what is the release we are talking about. Besides this, and since Cassandra does not change its Thrift interface too much, you will probably just need the Aquiles that match exactly the first 2 levels of version (those would be just Major.Minor). For example: Aquiles 0.7.0.X can support from Cassandra 0.7.0.0 to 0.7.6.0 and so on. If you need further assistance just ask on the discussion section.&lt;br /&gt;&lt;br /&gt;
&lt;h1&gt;Success Stories&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.javageneration.com/?p=318" class="externalLink"&gt;Chirper&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: twitter clone WebApp with .NET front-end and Cassandra NoSql back-end (&lt;b&gt;thanks Chaker Nakhli&lt;/b&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cipl.codeplex.com/" class="externalLink"&gt;Common Information Platform&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: Common abstraction over various data stores. (&lt;b&gt;thanks PatrickThompson&lt;/b&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.despegar.com/" class="externalLink"&gt;Despegar.com&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: Online Travel Agency. (&lt;b&gt;thanks All in Despegar&lt;/b&gt;)&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Donations&lt;/h1&gt;As you know, this project is free and it is supported and developed during my free time. However, I accept donations to help support Aquiles and accelerate development on it. &lt;a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;amp;business=4N67395RL2R4A&amp;amp;lc=US&amp;amp;item_name=Aquiles&amp;amp;item_number=Aquiles&amp;amp;currency_code=USD" class="externalLink"&gt;Click here to donate to Aquiles&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>javiercanillas</author><pubDate>Thu, 27 Oct 2011 13:27:27 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20111027012727P</guid></item><item><title>Updated Wiki: Home</title><link>http://aquiles.codeplex.com/wikipage?version=61</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;&lt;b&gt;News&lt;/b&gt;&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;Check download section, new support for 1.0. Documentation still not updated, it will be soon.&lt;/li&gt;
&lt;li&gt;Follow us on tweeter to get updates &lt;b&gt;@Aquiles4Net&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Description&lt;/h1&gt;
Aquiles is a .NET (v3.5 or above) Client for &lt;a href="http://cassandra.apache.org/" class="externalLink"&gt;Apache Cassandra&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; version 0.6.X or above using &lt;a href="http://wiki.apache.org/cassandra/API" class="externalLink"&gt;Thrift API&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Basically, It adds:
&lt;ul&gt;&lt;li&gt;A &lt;b&gt;.NET friendly interface&lt;/b&gt; to cassandra operations. You operates against cassandra as you would operate against an SQL (See examples)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Connection Pool&lt;/b&gt; with warm-up and size control capabilities&lt;/li&gt;
&lt;li&gt;An &lt;b&gt;Endpoint Manager&lt;/b&gt; to manage all the entrypoint nodes to one cluster. It will automatically &lt;b&gt;distribute the connections against all the cluster endpoints&lt;/b&gt; defined, and will &lt;b&gt;check for healthiness&lt;/b&gt; of the nodes with a defensive node health check strategy.&lt;/li&gt;
&lt;li&gt;Command parameter Validation:&lt;/li&gt;
&lt;li&gt;a &lt;b&gt;simple and user-friendly configuration section&lt;/b&gt; to configure all your clusters and support for &lt;b&gt;dependency-injection frameworks&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;You &lt;b&gt;can handle more than 1 cluster&lt;/b&gt; in your application &lt;/li&gt;
&lt;li&gt;You can configure what &lt;b&gt;ConnectionPool&lt;/b&gt; you want to use and its &lt;b&gt;internal parameters&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;You can choose what &lt;b&gt;EndpointManager&lt;/b&gt; you want to use&lt;/li&gt;
&lt;li&gt;You can &lt;b&gt;choose what Transport do you want to use&lt;/b&gt;, and even when using TBufferedTransport you can set the length of the buffer!&lt;/li&gt;
&lt;li&gt;You can managed (add, modify, remove) your Keyspaces and ColumnFamilies&lt;/li&gt;
&lt;li&gt;Some &lt;b&gt;Byte Enconder Helpers to avoid the need to create and managed your own&lt;/b&gt; (Long, UTF8, ASCII, GUID, UUID, Long, Int and so on).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Monitor features out of the box, now you can monitor all your connections to Cassandra simply by using Performance Monitor (native with Windows)&lt;/b&gt; by implementing &lt;a href="http://perfmoncounterhelper.codeplex.com" class="externalLink"&gt;PerformanceCounterHelper fwk&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; (*). Take the following screenshot as an example:&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=Aquiles&amp;DownloadId=226455" alt="Monitor.jpg" title="Monitor.jpg" /&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;Instructions on how to enable this feature are in &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Diagnostic.Extension&amp;referringTitle=Home"&gt;Aquiles.Diagnostic.Extension&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;(*) This feature was disabled on last refactor, it will be enabled back again soon.&lt;br /&gt;&lt;br /&gt;You can take a look at &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.VersionHistory&amp;referringTitle=Home"&gt;Version History&lt;/a&gt; for the lastest updates.
&lt;hr /&gt;

&lt;h1&gt;Commands Supported&lt;/h1&gt;
Aquiles supports all the Cassandra commands. Check &lt;a href="http://wiki.apache.org/cassandra/API" class="externalLink"&gt;Cassandra API&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; on documentation about each one.&lt;br /&gt;
&lt;h1&gt;Easy Example of use&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Example 1&lt;/b&gt;:&lt;/li&gt;&lt;/ul&gt;
Suppose that you have a Cassandra instance configured in your App.Confg or Web.Config, and you named it &amp;quot;Cassandra1&amp;quot;. Suppose then, that there is a Keyspace called &amp;quot;TestKeyspace&amp;quot; and within that KeySpace there is a ColumnFamily called &amp;quot;TestColumnFamily&amp;quot;.&lt;br /&gt;Now, lets presume that you need to insert a new key &amp;quot;testKey&amp;quot; with a new Column called &amp;quot;testColumn&amp;quot; with a value of &amp;quot;testValue&amp;quot;. You may acomplish that with the following code.&lt;br /&gt;&lt;pre&gt;
string columnFamily = &amp;quot;TestColumnFamily&amp;quot;;
string keyspace = &amp;quot;TestKeyspace&amp;quot;;
string key = &amp;quot;testKey&amp;quot;;
string columnName = &amp;quot;testColumn&amp;quot;;
string columnValue = &amp;quot;testValue&amp;quot;;

// Insert statement
byte[] key = ByteEncoderHelper.LongEncoder.ToByteArray(i);
ColumnParent columnParent = new ColumnParent();
Column column = new Column() {
    Name = ByteEncoderHelper.UTF8Encoder.ToByteArray(columnName),
    Timestamp = UnixHelper.UnixTimestamp,
    Value = ByteEncoderHelper.UTF8Encoder.ToByteArray(columnValue),
};

columnParent.Column_family = columnFamily;

ICluster cluster = AquilesHelper.RetrieveCluster(&amp;quot;Cassandra1&amp;quot;);
cluster.Execute(new ExecutionBlock(delegate(CassandraClient client) {
    client.insert(key, columnParent, column, ConsistencyLevel.ONE);
    return null;
}), keyspace);

&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Example 2&lt;/b&gt;:&lt;/li&gt;&lt;/ul&gt;
Now, Lets continue with the assumption of the Example1 and that you need to retrieve the value inserted. Your code would be similar to:&lt;br /&gt;&lt;pre&gt;
// Get statement
byte[] key = ByteEncoderHelper.LongEncoder.ToByteArray(2);
ColumnPath columnPath = new ColumnPath()
{
    Column = ByteEncoderHelper.UTF8Encoder.ToByteArray(columnName),
    Column_family = columnFamily,
};
ICluster cluster = AquilesHelper.RetrieveCluster(&amp;quot;Cassandra1&amp;quot;);
object rtnValue = cluster.Execute(new ExecutionBlock(delegate(CassandraClient client)
{
    return client.get(key, columnPath, ConsistencyLevel.ONE);
}), keyspace);
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As you see, using this client is, somehow, like using a connection to a Database (Cassandra is not a database, but the syntax is similar). More examples can be found at each command.&lt;br /&gt;
&lt;h1&gt;Aquiles Configuration Section&lt;/h1&gt;Configuring Aquiles to use a Cassandra cluster is easy, add the following section into your App.Config (Web.config in case of ASPNET application):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;configuration&amp;gt;
  &amp;lt;configSections&amp;gt;
    &amp;lt;section name=&amp;quot;aquilesConfiguration&amp;quot; type=&amp;quot;Aquiles.Core.Configuration.AquilesConfigurationSection,Aquiles.Core&amp;quot;/&amp;gt;
  &amp;lt;/configSections&amp;gt;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; That the section name must be &amp;#39;&amp;#39;aquilesConfiguration&amp;#39;&amp;#39; and no other, or you Aquiles will not load and will throw a ConfigurationException when first time used.&lt;br /&gt;&lt;br /&gt;After that, you will only need to configure your cluster&amp;#39;s information like following:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
 &amp;lt;aquilesConfiguration&amp;gt;
    &amp;lt;clusters&amp;gt;
      &amp;lt;add friendlyName=&amp;quot;Keyspace1&amp;quot;&amp;gt;
        &amp;lt;connection poolType=&amp;quot;SIZECONTROLLEDPOOL&amp;quot; factoryType=&amp;quot;FRAMED&amp;quot;&amp;gt;
        &amp;lt;/connection&amp;gt;
        &amp;lt;endpointManager type=&amp;quot;ROUNDROBIN&amp;quot; defaultTimeout=&amp;quot;6000&amp;quot;&amp;gt;
          &amp;lt;cassandraEndpoints&amp;gt;
            &amp;lt;add address=&amp;quot;localhost&amp;quot; port=&amp;quot;9160&amp;quot;/&amp;gt;
          &amp;lt;/cassandraEndpoints&amp;gt;
        &amp;lt;/endpointManager&amp;gt;
      &amp;lt;/add&amp;gt;
    &amp;lt;/clusters&amp;gt;
  &amp;lt;/aquilesConfiguration&amp;gt;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;For further Configuration options, please see &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Configuration&amp;referringTitle=Home"&gt;Configuring Aquiles&lt;/a&gt;
&lt;hr /&gt;

&lt;h1&gt;Hints, Tricks, Best Practices&lt;/h1&gt;See a list of Hints, Tricks and Best Practices in this &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.BestPractices&amp;referringTitle=Home"&gt;document&lt;/a&gt;.&lt;br /&gt;
&lt;h1&gt;Frequently Asked Questions&lt;/h1&gt;Q: &lt;b&gt;Is this thing production ready?&lt;/b&gt;&lt;br /&gt;A: &lt;b&gt;Yes&lt;/b&gt;, im using it now on a heavy traffic site and it works great.&lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Sure it is production ready?&lt;/b&gt;&lt;br /&gt;A: Well, do a load test and &lt;b&gt;give us feedback&lt;/b&gt;. If you find something wrong, let us know. And if you fix it, consider sharing the code.&lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Are you going to support AVRO?&lt;/b&gt;&lt;br /&gt;A: &lt;b&gt;Maybe&lt;/b&gt;. At this time, the evolution of aquiles is driven by our needs, and we won&amp;#39;t upgrade our cassandra servers until the TTL is on the trunk (or any other compelling feature or killing bug). &lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Hey, it is Achilles!&lt;/b&gt;&lt;br /&gt;A: Well, not for us spanish speaking people. To be fair, it should be &lt;b&gt;Ἀχιλλεύς&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;I&amp;#39;m a bit confuse on your version numbers. How do you choose them?&lt;/b&gt;&lt;br /&gt;A: Well, yeap. I know it&amp;#39;s a bit confusing. Cassandra now have 3 version numbers: Major.Minor.patchLevel. Well, I have added 1 more version lvl to the end in order to properly detect what is the release we are talking about. Besides this, and since Cassandra does not change its Thrift interface too much, you will probably just need the Aquiles that match exactly the first 2 levels of version (those would be just Major.Minor). For example: Aquiles 0.7.0.X can support from Cassandra 0.7.0.0 to 0.7.6.0 and so on. If you need further assistance just ask on the discussion section.&lt;br /&gt;&lt;br /&gt;
&lt;h1&gt;Success Stories&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.javageneration.com/?p=318" class="externalLink"&gt;Chirper&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: twitter clone WebApp with .NET front-end and Cassandra NoSql back-end (&lt;b&gt;thanks Chaker Nakhli&lt;/b&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cipl.codeplex.com/" class="externalLink"&gt;Common Information Platform&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: Common abstraction over various data stores. (&lt;b&gt;thanks PatrickThompson&lt;/b&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.despegar.com/" class="externalLink"&gt;Despegar.com&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: Online Travel Agency. (&lt;b&gt;thanks All in Despegar&lt;/b&gt;)&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Donations&lt;/h1&gt;As you know, this project is free and it is supported and developed during my free time. However, I accept donations to help support Aquiles and accelerate development on it. &lt;a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;amp;business=4N67395RL2R4A&amp;amp;lc=US&amp;amp;item_name=Aquiles&amp;amp;item_number=Aquiles&amp;amp;currency_code=USD" class="externalLink"&gt;Click here to donate to Aquiles&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>javiercanillas</author><pubDate>Thu, 27 Oct 2011 13:27:06 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20111027012706P</guid></item><item><title>Updated Wiki: Home</title><link>http://aquiles.codeplex.com/wikipage?version=60</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;&lt;b&gt;News&lt;/b&gt;&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;Check download section, new support for 1.0. Documentation still not updated, it will be soon.&lt;/li&gt;
&lt;li&gt;Follow us on tweeter to get updates @Aquiles4Net&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Description&lt;/h1&gt;
Aquiles is a .NET (v3.5 or above) Client for &lt;a href="http://cassandra.apache.org/" class="externalLink"&gt;Apache Cassandra&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; version 0.6.X or above using &lt;a href="http://wiki.apache.org/cassandra/API" class="externalLink"&gt;Thrift API&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Basically, It adds:
&lt;ul&gt;&lt;li&gt;A &lt;b&gt;.NET friendly interface&lt;/b&gt; to cassandra operations. You operates against cassandra as you would operate against an SQL (See examples)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Connection Pool&lt;/b&gt; with warm-up and size control capabilities&lt;/li&gt;
&lt;li&gt;An &lt;b&gt;Endpoint Manager&lt;/b&gt; to manage all the entrypoint nodes to one cluster. It will automatically &lt;b&gt;distribute the connections against all the cluster endpoints&lt;/b&gt; defined, and will &lt;b&gt;check for healthiness&lt;/b&gt; of the nodes with a defensive node health check strategy.&lt;/li&gt;
&lt;li&gt;Command parameter Validation:&lt;/li&gt;
&lt;li&gt;a &lt;b&gt;simple and user-friendly configuration section&lt;/b&gt; to configure all your clusters and support for &lt;b&gt;dependency-injection frameworks&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;You &lt;b&gt;can handle more than 1 cluster&lt;/b&gt; in your application &lt;/li&gt;
&lt;li&gt;You can configure what &lt;b&gt;ConnectionPool&lt;/b&gt; you want to use and its &lt;b&gt;internal parameters&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;You can choose what &lt;b&gt;EndpointManager&lt;/b&gt; you want to use&lt;/li&gt;
&lt;li&gt;You can &lt;b&gt;choose what Transport do you want to use&lt;/b&gt;, and even when using TBufferedTransport you can set the length of the buffer!&lt;/li&gt;
&lt;li&gt;You can managed (add, modify, remove) your Keyspaces and ColumnFamilies&lt;/li&gt;
&lt;li&gt;Some &lt;b&gt;Byte Enconder Helpers to avoid the need to create and managed your own&lt;/b&gt; (Long, UTF8, ASCII, GUID, UUID, Long, Int and so on).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Monitor features out of the box, now you can monitor all your connections to Cassandra simply by using Performance Monitor (native with Windows)&lt;/b&gt; by implementing &lt;a href="http://perfmoncounterhelper.codeplex.com" class="externalLink"&gt;PerformanceCounterHelper fwk&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; (*). Take the following screenshot as an example:&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=Aquiles&amp;DownloadId=226455" alt="Monitor.jpg" title="Monitor.jpg" /&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;Instructions on how to enable this feature are in &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Diagnostic.Extension&amp;referringTitle=Home"&gt;Aquiles.Diagnostic.Extension&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;(*) This feature was disabled on last refactor, it will be enabled back again soon.&lt;br /&gt;&lt;br /&gt;You can take a look at &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.VersionHistory&amp;referringTitle=Home"&gt;Version History&lt;/a&gt; for the lastest updates.
&lt;hr /&gt;

&lt;h1&gt;Commands Supported&lt;/h1&gt;
Aquiles supports all the Cassandra commands. Check &lt;a href="http://wiki.apache.org/cassandra/API" class="externalLink"&gt;Cassandra API&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; on documentation about each one.&lt;br /&gt;
&lt;h1&gt;Easy Example of use&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Example 1&lt;/b&gt;:&lt;/li&gt;&lt;/ul&gt;
Suppose that you have a Cassandra instance configured in your App.Confg or Web.Config, and you named it &amp;quot;Cassandra1&amp;quot;. Suppose then, that there is a Keyspace called &amp;quot;TestKeyspace&amp;quot; and within that KeySpace there is a ColumnFamily called &amp;quot;TestColumnFamily&amp;quot;.&lt;br /&gt;Now, lets presume that you need to insert a new key &amp;quot;testKey&amp;quot; with a new Column called &amp;quot;testColumn&amp;quot; with a value of &amp;quot;testValue&amp;quot;. You may acomplish that with the following code.&lt;br /&gt;&lt;pre&gt;
string columnFamily = &amp;quot;TestColumnFamily&amp;quot;;
string keyspace = &amp;quot;TestKeyspace&amp;quot;;
string key = &amp;quot;testKey&amp;quot;;
string columnName = &amp;quot;testColumn&amp;quot;;
string columnValue = &amp;quot;testValue&amp;quot;;

// Insert statement
byte[] key = ByteEncoderHelper.LongEncoder.ToByteArray(i);
ColumnParent columnParent = new ColumnParent();
Column column = new Column() {
    Name = ByteEncoderHelper.UTF8Encoder.ToByteArray(columnName),
    Timestamp = UnixHelper.UnixTimestamp,
    Value = ByteEncoderHelper.UTF8Encoder.ToByteArray(columnValue),
};

columnParent.Column_family = columnFamily;

ICluster cluster = AquilesHelper.RetrieveCluster(&amp;quot;Cassandra1&amp;quot;);
cluster.Execute(new ExecutionBlock(delegate(CassandraClient client) {
    client.insert(key, columnParent, column, ConsistencyLevel.ONE);
    return null;
}), keyspace);

&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Example 2&lt;/b&gt;:&lt;/li&gt;&lt;/ul&gt;
Now, Lets continue with the assumption of the Example1 and that you need to retrieve the value inserted. Your code would be similar to:&lt;br /&gt;&lt;pre&gt;
// Get statement
byte[] key = ByteEncoderHelper.LongEncoder.ToByteArray(2);
ColumnPath columnPath = new ColumnPath()
{
    Column = ByteEncoderHelper.UTF8Encoder.ToByteArray(columnName),
    Column_family = columnFamily,
};
ICluster cluster = AquilesHelper.RetrieveCluster(&amp;quot;Cassandra1&amp;quot;);
object rtnValue = cluster.Execute(new ExecutionBlock(delegate(CassandraClient client)
{
    return client.get(key, columnPath, ConsistencyLevel.ONE);
}), keyspace);
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As you see, using this client is, somehow, like using a connection to a Database (Cassandra is not a database, but the syntax is similar). More examples can be found at each command.&lt;br /&gt;
&lt;h1&gt;Aquiles Configuration Section&lt;/h1&gt;Configuring Aquiles to use a Cassandra cluster is easy, add the following section into your App.Config (Web.config in case of ASPNET application):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;configuration&amp;gt;
  &amp;lt;configSections&amp;gt;
    &amp;lt;section name=&amp;quot;aquilesConfiguration&amp;quot; type=&amp;quot;Aquiles.Core.Configuration.AquilesConfigurationSection,Aquiles.Core&amp;quot;/&amp;gt;
  &amp;lt;/configSections&amp;gt;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; That the section name must be &amp;#39;&amp;#39;aquilesConfiguration&amp;#39;&amp;#39; and no other, or you Aquiles will not load and will throw a ConfigurationException when first time used.&lt;br /&gt;&lt;br /&gt;After that, you will only need to configure your cluster&amp;#39;s information like following:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
 &amp;lt;aquilesConfiguration&amp;gt;
    &amp;lt;clusters&amp;gt;
      &amp;lt;add friendlyName=&amp;quot;Keyspace1&amp;quot;&amp;gt;
        &amp;lt;connection poolType=&amp;quot;SIZECONTROLLEDPOOL&amp;quot; factoryType=&amp;quot;FRAMED&amp;quot;&amp;gt;
        &amp;lt;/connection&amp;gt;
        &amp;lt;endpointManager type=&amp;quot;ROUNDROBIN&amp;quot; defaultTimeout=&amp;quot;6000&amp;quot;&amp;gt;
          &amp;lt;cassandraEndpoints&amp;gt;
            &amp;lt;add address=&amp;quot;localhost&amp;quot; port=&amp;quot;9160&amp;quot;/&amp;gt;
          &amp;lt;/cassandraEndpoints&amp;gt;
        &amp;lt;/endpointManager&amp;gt;
      &amp;lt;/add&amp;gt;
    &amp;lt;/clusters&amp;gt;
  &amp;lt;/aquilesConfiguration&amp;gt;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;For further Configuration options, please see &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Configuration&amp;referringTitle=Home"&gt;Configuring Aquiles&lt;/a&gt;
&lt;hr /&gt;

&lt;h1&gt;Hints, Tricks, Best Practices&lt;/h1&gt;See a list of Hints, Tricks and Best Practices in this &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.BestPractices&amp;referringTitle=Home"&gt;document&lt;/a&gt;.&lt;br /&gt;
&lt;h1&gt;Frequently Asked Questions&lt;/h1&gt;Q: &lt;b&gt;Is this thing production ready?&lt;/b&gt;&lt;br /&gt;A: &lt;b&gt;Yes&lt;/b&gt;, im using it now on a heavy traffic site and it works great.&lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Sure it is production ready?&lt;/b&gt;&lt;br /&gt;A: Well, do a load test and &lt;b&gt;give us feedback&lt;/b&gt;. If you find something wrong, let us know. And if you fix it, consider sharing the code.&lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Are you going to support AVRO?&lt;/b&gt;&lt;br /&gt;A: &lt;b&gt;Maybe&lt;/b&gt;. At this time, the evolution of aquiles is driven by our needs, and we won&amp;#39;t upgrade our cassandra servers until the TTL is on the trunk (or any other compelling feature or killing bug). &lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Hey, it is Achilles!&lt;/b&gt;&lt;br /&gt;A: Well, not for us spanish speaking people. To be fair, it should be &lt;b&gt;Ἀχιλλεύς&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;I&amp;#39;m a bit confuse on your version numbers. How do you choose them?&lt;/b&gt;&lt;br /&gt;A: Well, yeap. I know it&amp;#39;s a bit confusing. Cassandra now have 3 version numbers: Major.Minor.patchLevel. Well, I have added 1 more version lvl to the end in order to properly detect what is the release we are talking about. Besides this, and since Cassandra does not change its Thrift interface too much, you will probably just need the Aquiles that match exactly the first 2 levels of version (those would be just Major.Minor). For example: Aquiles 0.7.0.X can support from Cassandra 0.7.0.0 to 0.7.6.0 and so on. If you need further assistance just ask on the discussion section.&lt;br /&gt;&lt;br /&gt;
&lt;h1&gt;Success Stories&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.javageneration.com/?p=318" class="externalLink"&gt;Chirper&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: twitter clone WebApp with .NET front-end and Cassandra NoSql back-end (&lt;b&gt;thanks Chaker Nakhli&lt;/b&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cipl.codeplex.com/" class="externalLink"&gt;Common Information Platform&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: Common abstraction over various data stores. (&lt;b&gt;thanks PatrickThompson&lt;/b&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.despegar.com/" class="externalLink"&gt;Despegar.com&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: Online Travel Agency. (&lt;b&gt;thanks All in Despegar&lt;/b&gt;)&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Donations&lt;/h1&gt;As you know, this project is free and it is supported and developed during my free time. However, I accept donations to help support Aquiles and accelerate development on it. &lt;a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;amp;business=4N67395RL2R4A&amp;amp;lc=US&amp;amp;item_name=Aquiles&amp;amp;item_number=Aquiles&amp;amp;currency_code=USD" class="externalLink"&gt;Click here to donate to Aquiles&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>javiercanillas</author><pubDate>Thu, 27 Oct 2011 13:26:48 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20111027012648P</guid></item><item><title>Updated Wiki: Aquiles.VersionHistory</title><link>http://aquiles.codeplex.com/wikipage?title=Aquiles.VersionHistory&amp;version=19</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Version History&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Planning changes&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;using individual pools for each Keyspace connected from a cluster, doing so we avoid a roundtrip to set such keyspace on the connection before using it.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;v1.0.0.0&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;added support for Cassandra 1.0.X versions.&lt;/li&gt;
&lt;li&gt;default unixtimestamp multipied by 1000 to standarize with cassandra-cli.&lt;/li&gt;
&lt;li&gt;moved previous version to use inner Thrift generated Cassandra classes instead of external assemblies.&lt;/li&gt;
&lt;li&gt;fix for workitem:14319 &amp;quot;DefaultCluster will attach a non detached connection when executing an ExecutionBlock&amp;quot;&lt;/li&gt;
&lt;li&gt;moved Aquiles for Visual Studio 2010 and fwk 4.0 in order to use its new features.&lt;/li&gt;
&lt;li&gt;moved to use Nuget as dependency version management.&lt;/li&gt;
&lt;li&gt;moved to use Interlocked for better concurrency handling on SizeControlledClientPool.&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;v0.8.0.1&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;added support for Cassandra 0.8.X versions.&lt;/li&gt;
&lt;li&gt;default unixtimestamp multipied by 1000 to standarize with cassandra-cli.&lt;/li&gt;
&lt;li&gt;moved previous version to use inner Thrift generated Cassandra classes instead of external assemblies.&lt;/li&gt;
&lt;li&gt;fix for workitem:14319 &amp;quot;DefaultCluster will attach a non detached connection when executing an ExecutionBlock&amp;quot;&lt;/li&gt;
&lt;li&gt;moved Aquiles for Visual Studio 2010 and fwk 4.0 in order to use its new features.&lt;/li&gt;
&lt;li&gt;moved to use Nuget as dependency version management.&lt;/li&gt;
&lt;li&gt;moved to use Interlocked for better concurrency handling on SizeControlledClientPool.&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;v0.7.0.8&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;default unixtimestamp multipied by 1000 to standarize with cassandra-cli.&lt;/li&gt;
&lt;li&gt;moved previous version to use inner Thrift generated Cassandra classes instead of external assemblies.&lt;/li&gt;
&lt;li&gt;fix for workitem:14319 &amp;quot;DefaultCluster will attach a non detached connection when executing an ExecutionBlock&amp;quot;&lt;/li&gt;
&lt;li&gt;moved Aquiles for Visual Studio 2010 and fwk 4.0 in order to use its new features.&lt;/li&gt;
&lt;li&gt;moved to use Nuget as dependency version management.&lt;/li&gt;
&lt;li&gt;moved to use Interlocked for better concurrency handling on SizeControlledClientPool.&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;v.0.7.0.6&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;Added AquilesKeyRange the properties: StartToken and EndToken&lt;/li&gt;
&lt;li&gt;Changed the converter to support these new properties&lt;/li&gt;
&lt;li&gt;Added a GetKeyRangeSliceCommandTest method to test this new approach.&lt;/li&gt;
&lt;li&gt;2 new encoders for Long (Big-Endian and Little-Endian). Please use these if you need to use the columns for second indexes. Use Big-Endian implementations for most of Cassandra versions, since Java default implementation of Long to ByteArray (and viceversa) is Big-Endian.&lt;/li&gt;
&lt;li&gt;moved Logging namespace to Diagnostics&lt;/li&gt;
&lt;li&gt;Added an Interface to support MonitoringFeatures (like time on borrows, releases, quantity of active connections, inactive connections and so on)&lt;/li&gt;
&lt;li&gt;Added a Helper to support the above feature internally&lt;/li&gt;
&lt;li&gt;Added a new property on the configuration section to be able to add your own implementation of IMonitorFeatures to log such information&lt;/li&gt;
&lt;li&gt;Added a whole new project that use PerformanceCounterHelper (see http://perfmoncounterhelper.codeplex.com) to submit the collected features values into Performance Counter.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;v0.7.0.5&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;fix &lt;a href="http://aquiles.codeplex.com/workitem/12796"&gt;GetKeyRangeSliceCommand doesn&amp;#39;t support for empty Start and End Key&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Also fix that AquilesTokenRange structure to match Cassandra structure&lt;/li&gt;
&lt;li&gt;Modified RetrieveKeyspaceDistributionComand to return a list of AquilesTokenRange.&lt;/li&gt;
&lt;li&gt;added KeyspaceConnectionPool to avoid 1 roundtrip to Cassandra Cluster. Still on test!!!&lt;/li&gt;
&lt;li&gt;fix &lt;a href="http://aquiles.codeplex.com/workitem/12809"&gt;AquilesColumn has TTL as required, but it is optional in Cassandra&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;fix &lt;a href="http://aquiles.codeplex.com/workitem/12869"&gt;UnavailableException and TimedOutException is not meaning of connection broken&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;0.7.0.4&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;added a new ColumnFamily with TimeUUID comparator.&lt;/li&gt;
&lt;li&gt;SizeControlledConnectionPool: now throws an exception if the cluster has no valid endpoints when creating a new connection&lt;/li&gt;
&lt;li&gt;DefaultAquilesCluster: taking out the validation on the endpoints to assure they al point to the same cluster due to some problems when 1 endpoint is taken down after creating connection pool.&lt;/li&gt;
&lt;li&gt;Added support for &amp;quot;get&lt;i&gt;indexed&lt;/i&gt;slices&amp;quot; that let you do a search with some conditions.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;0.7.0.3&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;Added Validation for TTL of Columns when inserting a column&lt;/li&gt;
&lt;li&gt;Added DateTimePrecise from http://www.codeproject.com/KB/cs/DateTimePrecise.aspx?display=Print to properly generate random Guid based on a more precise time data.&lt;/li&gt;
&lt;li&gt;Added a UUIDEncoderHelper that actually works with dotnet GUID but it converts to a byte[] structure compatible with Java UUID.&lt;/li&gt;
&lt;li&gt;Added Test for the above implementations and changes.&lt;/li&gt;
&lt;li&gt;fixed the UnixTimestamp. There was a bu* moved from Cassandra 0.7-beta2 to 0.7-beta2&lt;/li&gt;
&lt;li&gt;moved from thrift 0.2 to 0.5&lt;/li&gt;
&lt;li&gt;removed RenameColumnFamilyCommand and RenameKeyspaceCommand since they are not longer supported on Thrift API&lt;/li&gt;
&lt;li&gt;Optional properties on AquilesColumnFamily are now nullable to support default values within Cassandra Server.&lt;/li&gt;
&lt;li&gt;Added support for optional parameters on AquilesColumnFamilyConverterg that the actual DateTime was taken as UTC but the unitStartDateTime was not represented as UTC.&lt;/li&gt;
&lt;li&gt;Extended the TTL validation. It shouldn&amp;#39;t let TTL value equal or below to zero.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;0.7.0.2&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;taken out all the keyspace and columnfamily validation since Cassandra 0.7.0-beta1 work with this on the fly&lt;/li&gt;
&lt;li&gt;Thrift structure converters created.&lt;/li&gt;
&lt;li&gt;changed command logic when creating and updating data to use converters.&lt;/li&gt;
&lt;li&gt;The GetKeyRangeSliceCommand threw a null reference exception when building output response. Fixed by Aaron8498.&lt;/li&gt;
&lt;li&gt;expose CfDef metadata in describe_keyspaces (CASSANDRA-1633)&lt;/li&gt;
&lt;li&gt;rename RackAwareStrategy to OldNetworkTopologyStrategy, RackUnawareStrategy to SimpleStrategy, DatacenterShardStrategy to NetworkTopologyStrategy, AbstractRackAwareSnitch to AbstractNetworkTopologySnitch (CASSANDRA-1392)&lt;/li&gt;
&lt;li&gt;remove keyspace argument from multiget_count (CASSANDRA-1422)&lt;/li&gt;
&lt;li&gt;Add AquilesColumnFamily.DefaultValidationClass (CASSANDRA-891)&lt;/li&gt;
&lt;li&gt;Add DescribeSplitsCommand to support describe_splits&lt;/li&gt;
&lt;li&gt;rename check&lt;i&gt;schema&lt;/i&gt;agreement to describe&lt;i&gt;schema&lt;/i&gt;versions (CASSANDRA-1478)&lt;/li&gt;
&lt;li&gt;min, max compaction threshold are now configurable and persistent per-ColumnFamily (CASSANDRA-1468) (AquilesColumnFamily.MinimumCompactationThreshold and AquilesColumnFamily.MaximumCompactationThreshold)&lt;/li&gt;
&lt;li&gt;Removed Clock structure (CASSANDRA-1501)&lt;/li&gt;
&lt;li&gt;Added DescribeSnitchCommand to support new method describe_snitch in Thrift API (CASSANDRA-1490)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;v0.7.0.0-beta1&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Added preliminar support for Apache-Cassandra version 0.7-beta1&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;v0.6.4.2
&lt;ul&gt;&lt;li&gt;Moved SuperColumn Name and Columns names and values into Byte[]. Doing so, predicates and everything related to them are moved to Byte[] too. This will enable users to work with Long, TimeUUID and even Serializable Objects than can be converted into a Byte[].&lt;/li&gt;
&lt;li&gt;Added some useful EncoderHelpers in order to help clients to overcode this big change.&lt;/li&gt;
&lt;li&gt;Added more helpful methods and class comments.&lt;/li&gt;
&lt;li&gt;GetKeyRangeSliceCommand will now output a list of GetKeyRangeSliceCommand.Out class that now has the Key as property.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;v0.6.4.1
&lt;ul&gt;&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/workitem/11744"&gt;BatchMutateCommand with SuperColumns over a Standard ColumnFamily&lt;/a&gt; fixed&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/workitem/11745"&gt;MultiGetSliceCommand without SuperColumn over a Super ColumnFamily Type&lt;/a&gt; fixed&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;v0.6.4.0
&lt;ul&gt;&lt;li&gt;Added support for Apache Cassandra version 0.6.4.0&lt;/li&gt;
&lt;li&gt;Added support for the new method &amp;quot;describe_partitioner&amp;quot; through a new command called &amp;quot;RetrievePartitionerCommand&amp;quot;&lt;/li&gt;
&lt;li&gt;Added an static method called &amp;quot;RetrieveInformation&amp;quot; to &amp;quot;AquilesHelper&amp;quot; so you can get the configuration parameters of each cluster (local config and remote config)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;v0.6.3.0
&lt;ul&gt;&lt;li&gt;Added support for Apache Cassandra version 0.6.3.0&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;v0.6.2.1
&lt;ul&gt;&lt;li&gt;Change version to match Apache Cassandra version&lt;/li&gt;
&lt;li&gt;Fixed &lt;a href="http://aquiles.codeplex.com/workitem/11456"&gt;DeleteCommand validation exception when column value is null&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;v1.0.0.1
&lt;ul&gt;&lt;li&gt;Fixed &lt;a href="http://aquiles.codeplex.com/workitem/11340"&gt;divide by zero in SizeControlledConnectionPool.controlIdleClientSizeMethod&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;v1.0.0.0
&lt;ul&gt;&lt;li&gt;Initial Release that support Apache Cassandra version 0.6.2&lt;/li&gt;
&lt;li&gt;Connection Pool: to avoid performance and resource problems under heavy traffic. &lt;/li&gt;
&lt;li&gt;Node Balancing for proper distribution of traffic: this will equally distribute the connections to a cluster between all the nodes configured to that cluster.&lt;/li&gt;
&lt;li&gt;Defensive node health check: when the framework detects a node is down, it will ban that node and every X seconds will attempt to connect to it. When this try success then that node is put back in the distrubution list.&lt;/li&gt;
&lt;li&gt;Command Validation: Before attempting to open a connection against a cluster, Aquiles will validate the Command Input (Column, SuperColumn, etc). It even will validate that the ColumnFamily exists within the KeySpace, and that the KeySpace exists within the cluster.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>javiercanillas</author><pubDate>Thu, 27 Oct 2011 13:22:12 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Aquiles.VersionHistory 20111027012212P</guid></item><item><title>Updated Wiki: Home</title><link>http://aquiles.codeplex.com/wikipage?version=59</link><description>&lt;div class="wikidoc"&gt;&lt;h2&gt;Check download section, new support for 1.0. Documentation still not updated, it will be soon.&lt;/h2&gt;
&lt;h1&gt;Description&lt;/h1&gt;
Aquiles is a .NET (v3.5 or above) Client for &lt;a href="http://cassandra.apache.org/" class="externalLink"&gt;Apache Cassandra&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; version 0.6.X or above using &lt;a href="http://wiki.apache.org/cassandra/API" class="externalLink"&gt;Thrift API&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Basically, It adds:
&lt;ul&gt;&lt;li&gt;A &lt;b&gt;.NET friendly interface&lt;/b&gt; to cassandra operations. You operates against cassandra as you would operate against an SQL (See examples)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Connection Pool&lt;/b&gt; with warm-up and size control capabilities&lt;/li&gt;
&lt;li&gt;An &lt;b&gt;Endpoint Manager&lt;/b&gt; to manage all the entrypoint nodes to one cluster. It will automatically &lt;b&gt;distribute the connections against all the cluster endpoints&lt;/b&gt; defined, and will &lt;b&gt;check for healthiness&lt;/b&gt; of the nodes with a defensive node health check strategy.&lt;/li&gt;
&lt;li&gt;Command parameter Validation:&lt;/li&gt;
&lt;li&gt;a &lt;b&gt;simple and user-friendly configuration section&lt;/b&gt; to configure all your clusters and support for &lt;b&gt;dependency-injection frameworks&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;You &lt;b&gt;can handle more than 1 cluster&lt;/b&gt; in your application &lt;/li&gt;
&lt;li&gt;You can configure what &lt;b&gt;ConnectionPool&lt;/b&gt; you want to use and its &lt;b&gt;internal parameters&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;You can choose what &lt;b&gt;EndpointManager&lt;/b&gt; you want to use&lt;/li&gt;
&lt;li&gt;You can &lt;b&gt;choose what Transport do you want to use&lt;/b&gt;, and even when using TBufferedTransport you can set the length of the buffer!&lt;/li&gt;
&lt;li&gt;You can managed (add, modify, remove) your Keyspaces and ColumnFamilies&lt;/li&gt;
&lt;li&gt;Some &lt;b&gt;Byte Enconder Helpers to avoid the need to create and managed your own&lt;/b&gt; (Long, UTF8, ASCII, GUID, UUID, Long, Int and so on).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Monitor features out of the box, now you can monitor all your connections to Cassandra simply by using Performance Monitor (native with Windows)&lt;/b&gt; by implementing &lt;a href="http://perfmoncounterhelper.codeplex.com" class="externalLink"&gt;PerformanceCounterHelper fwk&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; (*). Take the following screenshot as an example:&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=Aquiles&amp;DownloadId=226455" alt="Monitor.jpg" title="Monitor.jpg" /&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;Instructions on how to enable this feature are in &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Diagnostic.Extension&amp;referringTitle=Home"&gt;Aquiles.Diagnostic.Extension&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;(*) This feature was disabled on last refactor, it will be enabled back again soon.&lt;br /&gt;&lt;br /&gt;You can take a look at &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.VersionHistory&amp;referringTitle=Home"&gt;Version History&lt;/a&gt; for the lastest updates.
&lt;hr /&gt;

&lt;h1&gt;Commands Supported&lt;/h1&gt;
Aquiles supports all the Cassandra commands. Check &lt;a href="http://wiki.apache.org/cassandra/API" class="externalLink"&gt;Cassandra API&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; on documentation about each one.&lt;br /&gt;
&lt;h1&gt;Easy Example of use&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Example 1&lt;/b&gt;:&lt;/li&gt;&lt;/ul&gt;
Suppose that you have a Cassandra instance configured in your App.Confg or Web.Config, and you named it &amp;quot;Cassandra1&amp;quot;. Suppose then, that there is a Keyspace called &amp;quot;TestKeyspace&amp;quot; and within that KeySpace there is a ColumnFamily called &amp;quot;TestColumnFamily&amp;quot;.&lt;br /&gt;Now, lets presume that you need to insert a new key &amp;quot;testKey&amp;quot; with a new Column called &amp;quot;testColumn&amp;quot; with a value of &amp;quot;testValue&amp;quot;. You may acomplish that with the following code.&lt;br /&gt;&lt;pre&gt;
string columnFamily = &amp;quot;TestColumnFamily&amp;quot;;
string keyspace = &amp;quot;TestKeyspace&amp;quot;;
string key = &amp;quot;testKey&amp;quot;;
string columnName = &amp;quot;testColumn&amp;quot;;
string columnValue = &amp;quot;testValue&amp;quot;;

// Insert statement
byte[] key = ByteEncoderHelper.LongEncoder.ToByteArray(i);
ColumnParent columnParent = new ColumnParent();
Column column = new Column() {
    Name = ByteEncoderHelper.UTF8Encoder.ToByteArray(columnName),
    Timestamp = UnixHelper.UnixTimestamp,
    Value = ByteEncoderHelper.UTF8Encoder.ToByteArray(columnValue),
};

columnParent.Column_family = columnFamily;

ICluster cluster = AquilesHelper.RetrieveCluster(&amp;quot;Cassandra1&amp;quot;);
cluster.Execute(new ExecutionBlock(delegate(CassandraClient client) {
    client.insert(key, columnParent, column, ConsistencyLevel.ONE);
    return null;
}), keyspace);

&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Example 2&lt;/b&gt;:&lt;/li&gt;&lt;/ul&gt;
Now, Lets continue with the assumption of the Example1 and that you need to retrieve the value inserted. Your code would be similar to:&lt;br /&gt;&lt;pre&gt;
// Get statement
byte[] key = ByteEncoderHelper.LongEncoder.ToByteArray(2);
ColumnPath columnPath = new ColumnPath()
{
    Column = ByteEncoderHelper.UTF8Encoder.ToByteArray(columnName),
    Column_family = columnFamily,
};
ICluster cluster = AquilesHelper.RetrieveCluster(&amp;quot;Cassandra1&amp;quot;);
object rtnValue = cluster.Execute(new ExecutionBlock(delegate(CassandraClient client)
{
    return client.get(key, columnPath, ConsistencyLevel.ONE);
}), keyspace);
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As you see, using this client is, somehow, like using a connection to a Database (Cassandra is not a database, but the syntax is similar). More examples can be found at each command.&lt;br /&gt;
&lt;h1&gt;Aquiles Configuration Section&lt;/h1&gt;Configuring Aquiles to use a Cassandra cluster is easy, add the following section into your App.Config (Web.config in case of ASPNET application):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;configuration&amp;gt;
  &amp;lt;configSections&amp;gt;
    &amp;lt;section name=&amp;quot;aquilesConfiguration&amp;quot; type=&amp;quot;Aquiles.Core.Configuration.AquilesConfigurationSection,Aquiles.Core&amp;quot;/&amp;gt;
  &amp;lt;/configSections&amp;gt;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; That the section name must be &amp;#39;&amp;#39;aquilesConfiguration&amp;#39;&amp;#39; and no other, or you Aquiles will not load and will throw a ConfigurationException when first time used.&lt;br /&gt;&lt;br /&gt;After that, you will only need to configure your cluster&amp;#39;s information like following:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
 &amp;lt;aquilesConfiguration&amp;gt;
    &amp;lt;clusters&amp;gt;
      &amp;lt;add friendlyName=&amp;quot;Keyspace1&amp;quot;&amp;gt;
        &amp;lt;connection poolType=&amp;quot;SIZECONTROLLEDPOOL&amp;quot; factoryType=&amp;quot;FRAMED&amp;quot;&amp;gt;
        &amp;lt;/connection&amp;gt;
        &amp;lt;endpointManager type=&amp;quot;ROUNDROBIN&amp;quot; defaultTimeout=&amp;quot;6000&amp;quot;&amp;gt;
          &amp;lt;cassandraEndpoints&amp;gt;
            &amp;lt;add address=&amp;quot;localhost&amp;quot; port=&amp;quot;9160&amp;quot;/&amp;gt;
          &amp;lt;/cassandraEndpoints&amp;gt;
        &amp;lt;/endpointManager&amp;gt;
      &amp;lt;/add&amp;gt;
    &amp;lt;/clusters&amp;gt;
  &amp;lt;/aquilesConfiguration&amp;gt;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;For further Configuration options, please see &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Configuration&amp;referringTitle=Home"&gt;Configuring Aquiles&lt;/a&gt;
&lt;hr /&gt;

&lt;h1&gt;Hints, Tricks, Best Practices&lt;/h1&gt;See a list of Hints, Tricks and Best Practices in this &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.BestPractices&amp;referringTitle=Home"&gt;document&lt;/a&gt;.&lt;br /&gt;
&lt;h1&gt;Frequently Asked Questions&lt;/h1&gt;Q: &lt;b&gt;Is this thing production ready?&lt;/b&gt;&lt;br /&gt;A: &lt;b&gt;Yes&lt;/b&gt;, im using it now on a heavy traffic site and it works great.&lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Sure it is production ready?&lt;/b&gt;&lt;br /&gt;A: Well, do a load test and &lt;b&gt;give us feedback&lt;/b&gt;. If you find something wrong, let us know. And if you fix it, consider sharing the code.&lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Are you going to support AVRO?&lt;/b&gt;&lt;br /&gt;A: &lt;b&gt;Maybe&lt;/b&gt;. At this time, the evolution of aquiles is driven by our needs, and we won&amp;#39;t upgrade our cassandra servers until the TTL is on the trunk (or any other compelling feature or killing bug). &lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Hey, it is Achilles!&lt;/b&gt;&lt;br /&gt;A: Well, not for us spanish speaking people. To be fair, it should be &lt;b&gt;Ἀχιλλεύς&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;I&amp;#39;m a bit confuse on your version numbers. How do you choose them?&lt;/b&gt;&lt;br /&gt;A: Well, yeap. I know it&amp;#39;s a bit confusing. Cassandra now have 3 version numbers: Major.Minor.patchLevel. Well, I have added 1 more version lvl to the end in order to properly detect what is the release we are talking about. Besides this, and since Cassandra does not change its Thrift interface too much, you will probably just need the Aquiles that match exactly the first 2 levels of version (those would be just Major.Minor). For example: Aquiles 0.7.0.X can support from Cassandra 0.7.0.0 to 0.7.6.0 and so on. If you need further assistance just ask on the discussion section.&lt;br /&gt;&lt;br /&gt;
&lt;h1&gt;Success Stories&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.javageneration.com/?p=318" class="externalLink"&gt;Chirper&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: twitter clone WebApp with .NET front-end and Cassandra NoSql back-end (&lt;b&gt;thanks Chaker Nakhli&lt;/b&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cipl.codeplex.com/" class="externalLink"&gt;Common Information Platform&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: Common abstraction over various data stores. (&lt;b&gt;thanks PatrickThompson&lt;/b&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.despegar.com/" class="externalLink"&gt;Despegar.com&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: Online Travel Agency. (&lt;b&gt;thanks All in Despegar&lt;/b&gt;)&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Donations&lt;/h1&gt;As you know, this project is free and it is supported and developed during my free time. However, I accept donations to help support Aquiles and accelerate development on it. &lt;a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;amp;business=4N67395RL2R4A&amp;amp;lc=US&amp;amp;item_name=Aquiles&amp;amp;item_number=Aquiles&amp;amp;currency_code=USD" class="externalLink"&gt;Click here to donate to Aquiles&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>javiercanillas</author><pubDate>Fri, 21 Oct 2011 22:38:36 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20111021103836P</guid></item><item><title>Updated Wiki: Aquiles.Configuration</title><link>http://aquiles.codeplex.com/wikipage?title=Aquiles.Configuration&amp;version=5</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Basic&lt;/h1&gt;
Configure Aquiles in .NET environment is easy. You are used to work with config files all the time (*.config) that provides us this technology, understanding that for App.config we point to Win32 Applications and for Web.Config we point to AspNet Web applications.&lt;br /&gt;To be able to work agains Aquiles / Cassandra we only need to follow the steps below:&lt;br /&gt;&lt;br /&gt;     1.- Add the apropiate section handler into our config file:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;configuration&amp;gt;
   &amp;lt;configSections&amp;gt;
      &amp;lt;section name=&amp;quot;aquilesConfiguration&amp;quot; type=&amp;quot;Aquiles.Core.Configuration.AquilesConfigurationSection,Aquiles.Core&amp;quot;/&amp;gt;
   &amp;lt;/configSections&amp;gt;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; That the section name must be aquilesConfiguration and no other, or you Aquiles will not load and will throw a ConfigurationException when first time used.&lt;br /&gt;&lt;br /&gt;     2.- After that, we need to declare the node &amp;quot;aquilesConfiguration&amp;quot; with the following structure:&lt;br /&gt;&lt;pre&gt;
&amp;lt;aquilesConfiguration&amp;gt;
   &amp;lt;loggingManager&amp;gt;Aquiles.Test.Logging.Logger,Aquiles.Test&amp;lt;/loggingManager&amp;gt;
   &amp;lt;clusters&amp;gt;
      &amp;lt;add friendlyName=&amp;quot;TestCluster1&amp;quot;&amp;gt;
         &amp;lt;connection poolType=&amp;quot;SIZECONTROLLEDPOOL&amp;quot; factoryType=&amp;quot;FRAMED&amp;quot; /&amp;gt;
         &amp;lt;endpointManager type=&amp;quot;ROUNDROBIN&amp;quot; defaultTimeout=&amp;quot;6000&amp;quot;&amp;gt;
            &amp;lt;cassandraEndpoints&amp;gt;
               &amp;lt;add address=&amp;quot;localhost&amp;quot; port=&amp;quot;9160&amp;quot;/&amp;gt;
            &amp;lt;/cassandraEndpoints&amp;gt;
         &amp;lt;/endpointManager&amp;gt;
      &amp;lt;/add&amp;gt;
      &amp;lt;add friendlyName=&amp;quot;TestCluster2&amp;quot;&amp;gt;
         &amp;lt;connection poolType=&amp;quot;SIZECONTROLLEDPOOL&amp;quot; factoryType=&amp;quot;FRAMED&amp;quot;&amp;gt;
            &amp;lt;specialConnectionParameters&amp;gt;
               &amp;lt;add key=&amp;quot;minimumClientsToKeepInPool&amp;quot; value=&amp;quot;20&amp;quot; /&amp;gt;
               &amp;lt;add key=&amp;quot;maximumClientsToSupportInPool&amp;quot; value=&amp;quot;1000&amp;quot; /&amp;gt;
               &amp;lt;add key=&amp;quot;magicNumber&amp;quot; value=&amp;quot;7&amp;quot; /&amp;gt;
            &amp;lt;/specialConnectionParameters&amp;gt;
         &amp;lt;/connection&amp;gt;
         &amp;lt;endpointManager type=&amp;quot;ROUNDROBIN&amp;quot; defaultTimeout=&amp;quot;3000&amp;quot;&amp;gt;
             &amp;lt;cassandraEndpoints&amp;gt;
               &amp;lt;add address=&amp;quot;localhost&amp;quot; port=&amp;quot;9160&amp;quot;/&amp;gt;
               &amp;lt;add address=&amp;quot;darwin&amp;quot; port=&amp;quot;9160&amp;quot; timeout=&amp;quot;9000&amp;quot;/&amp;gt;
            &amp;lt;/cassandraEndpoints&amp;gt;
         &amp;lt;/endpointManager&amp;gt;
      &amp;lt;/add&amp;gt;
   &amp;lt;/clusters&amp;gt;
&amp;lt;/aquilesConfiguration&amp;gt;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now, lets take a close view for each of the nodes&lt;br /&gt;
&lt;h1&gt;Advance&lt;/h1&gt;&lt;h2&gt;Logging Manager&lt;/h2&gt;In case that you want to see what&amp;#39;s happening inside this box, you may do it by implementing from &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Logging.LoggerHelper&amp;referringTitle=Aquiles.Configuration"&gt;LoggerHelper&lt;/a&gt;. Aquiles will use that class to create an instance of it and route all the logging information through it. Then, you only need to add the whole Type of your class in the config to let Aquiles properly instanciate it.&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; If you put an invalid class, or the class is not found an Exception during Initialization will be thrown.&lt;br /&gt;
&lt;h2&gt;Monitoring Features&lt;/h2&gt;Since version 0.7.0.6, Aquiles support to hook an IMonitorFeatures class implementation from its configuration section to send all the health information into some repository. Natively, Aquiles supports, by using the library &lt;a href="http://perfmoncounterhelper.codeplex.com/" class="externalLink"&gt;PerformanceCounterHelper&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, sending all such information into Performance Monitor that is built in Windows. To enable this feature, you will need to register the IMonitorFeatures implementation doing something like the following:&lt;br /&gt;&lt;pre&gt;
 &amp;lt;aquilesConfiguration&amp;gt;
    &amp;lt;monitorFeaturesType&amp;gt;Aquiles.Diagnostics.Extension.PerformanceCounterMonitor,Aquiles.Diagnostics.Extension&amp;lt;/monitorFeaturesType&amp;gt;
    ...
 &amp;lt;/aquilesConfiguration&amp;gt;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The following information will be then monitorized within the new Category &lt;b&gt;Aquiles - Performance Counters&lt;/b&gt;:
&lt;ul&gt;&lt;li&gt;Number of Active connections&lt;/li&gt;
&lt;li&gt;Number of Free connections&lt;/li&gt;
&lt;li&gt;Number of invalid connections&lt;/li&gt;
&lt;li&gt;Number of created connections&lt;/li&gt;
&lt;li&gt;Number of destroyed connections&lt;/li&gt;
&lt;li&gt;Average Time on borrowing a connection from the pool, expressed in milliseconds.&lt;/li&gt;
&lt;li&gt;Average Time on returning a connection to the pool, expressed in milliseconds.&lt;/li&gt;
&lt;li&gt;Average Time on invalidate a connection to the pool, expressed in milliseconds.&lt;/li&gt;
&lt;li&gt;Number of Active endpoints&lt;/li&gt;
&lt;li&gt;Number of banned endpoints
&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Average Time on command execution, expressed in milliseconds.&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;Clusters&lt;/h2&gt;The node cluster, is basically a container for a collection of configured clusters, Here you can &amp;quot;add&amp;quot;, &amp;quot;remove&amp;quot;, &amp;quot;clear&amp;quot; any cluster previously defined in the Configuration Heriachy.&lt;br /&gt;
&lt;h3&gt;Add a cluster&lt;/h3&gt;If you want to add a cluster, after the &amp;quot;&amp;lt;clusters&amp;gt;&amp;quot; node, put and &amp;quot;&amp;lt;add &amp;quot; and start adding the following attribute information:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;friendlyName&lt;/b&gt;: a friendly name to call this configured cluster within your application. Note that by this name you will need to reference this cluster.&lt;/li&gt;&lt;/ul&gt;
&lt;pre&gt;
&amp;lt;clusters&amp;gt;
      &amp;lt;add friendlyName=&amp;quot;TestClusterX&amp;quot;&amp;gt;
      ...
      &amp;lt;/add&amp;gt;
&amp;lt;/clusters&amp;gt;
&lt;/pre&gt;
&lt;h2&gt;Remove a cluster&lt;/h2&gt;Consider this scenario, you have got a master config file with a cluster defined for you all Web Applications in your root directory, now, in a child Web Application, you decided that you don&amp;#39;t need that cluster anymore, then, knowing the friendly name of the cluster to be removed, you add a &amp;quot;&amp;lt;remove friendlyName=&amp;#39;XXXX&amp;#39;&amp;gt;&amp;quot;.&lt;br /&gt;&lt;pre&gt;
&amp;lt;clusters&amp;gt;
      &amp;lt;remove friendlyName=&amp;quot;TestClusterX&amp;quot; /&amp;gt;
&amp;lt;/clusters&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;h3&gt;Clearing all previous defined clusters&lt;/h3&gt;Ok, in the scenario that you want to get rid of all the previously defined clusters (because you want to start over with your application) you may add the following in your &amp;quot;&amp;lt;clusters&amp;gt;&amp;quot; node.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
&amp;lt;clusters&amp;gt;
      &amp;lt;clear /&amp;gt;
&amp;lt;/clusters&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;h3&gt;Connection&lt;/h3&gt;Within the connection node, you will find the following attributes:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;poolType&lt;/b&gt;: Defines what type of pool to use. The actual valid values are:
&lt;ul&gt;&lt;li&gt;&lt;i&gt;NOPOOL&lt;/i&gt;: will make a faked pool where actually no pool strategy will be used (each time you need a connection, a new connection is created and when you release it or invalidate it, the connection will be destroyed. See &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Connection.Pooling.NoConnectionPool&amp;referringTitle=Aquiles.Configuration"&gt;NoConnectionPool&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;SIZECONTROLLEDPOOL&lt;/i&gt;: will make use of &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Connection.Pooling.SizeControlledConnectionPool&amp;referringTitle=Aquiles.Configuration"&gt;SizeControlledConnectionPool&lt;/a&gt;. See class details on the pooling mechanism.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;factoryType&lt;/b&gt;: Defines how what kind of protocol to use when creating new connections. The actual valid values are:
&lt;ul&gt;&lt;li&gt;&lt;i&gt;DEFAULT&lt;/i&gt;: It use binary protocol over socket transport. See &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Connection.Factory.DefaultTransportConnectionFactory&amp;referringTitle=Aquiles.Configuration"&gt;DefaultTransportConnectionFactory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;BUFFERED&lt;/i&gt;: It use binary protocol over buffered transport (This is faster than Default). See &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Connection.Factory.BufferedTransportConnectionFactory&amp;referringTitle=Aquiles.Configuration"&gt;BufferedTransportConnectionFactory&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;As a child node, there is a &amp;quot;specialConnectionParameters&amp;quot;, inside this node, you will need to add a list of key-values accordingly to the &lt;i&gt;poolType&lt;/i&gt; and &lt;i&gt;factoryType&lt;/i&gt; previously defined. So see each implementation to see what are the key that they need.&lt;br /&gt;
&lt;h3&gt;EndpointManager&lt;/h3&gt;The endpointManager node, will define which will be the manage strategy to use, and what are the associated endpoints for that cluster. The following attributes are required:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;type&lt;/b&gt;: Type of endpoint manager to use. The actual valid values are:
&lt;ul&gt;&lt;li&gt;&lt;i&gt;ROUNDROBIN&lt;/i&gt;: this strategy will cycle through all the endpoints define, giving a Round Robin alike mechanism when retrieving an endpoint to create a connection against to.&lt;/li&gt;
&lt;li&gt;defaultTimeout*: the default timeout value for all the endpoints, in case each one of these don&amp;#39;t defined a particular one. Only int values greater than 0 are allowed.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;Cassandra Endpoints&lt;/h3&gt;This node is a collection alike container that only supports the add operation. The attributes each add may have are the followings:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;address&lt;/b&gt;: the address of one node of the Cassandra Cluster. It may have a DNS name or an IP.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;timeout&lt;/b&gt;: the particular endpoint timeout. Only int values greater than 0 are allowed. This attribute is optional since you have the &lt;i&gt;defaultTimeout&lt;/i&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>javiercanillas</author><pubDate>Sat, 17 Sep 2011 14:29:53 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Aquiles.Configuration 20110917022953P</guid></item><item><title>Updated Wiki: Home</title><link>http://aquiles.codeplex.com/wikipage?version=58</link><description>&lt;div class="wikidoc"&gt;&lt;h2&gt;Check download section, Huge refactor plus support for 0.8. Documentation still not updated, it will be soon.&lt;/h2&gt;
&lt;h1&gt;Description&lt;/h1&gt;
Aquiles is a .NET (v3.5 or above) Client for &lt;a href="http://cassandra.apache.org/" class="externalLink"&gt;Apache Cassandra&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; version 0.6.X or above using &lt;a href="http://wiki.apache.org/cassandra/API" class="externalLink"&gt;Thrift API&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Basically, It adds:
&lt;ul&gt;&lt;li&gt;A &lt;b&gt;.NET friendly interface&lt;/b&gt; to cassandra operations. You operates against cassandra as you would operate against an SQL (See examples)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Connection Pool&lt;/b&gt; with warm-up and size control capabilities&lt;/li&gt;
&lt;li&gt;An &lt;b&gt;Endpoint Manager&lt;/b&gt; to manage all the entrypoint nodes to one cluster. It will automatically &lt;b&gt;distribute the connections against all the cluster endpoints&lt;/b&gt; defined, and will &lt;b&gt;check for healthiness&lt;/b&gt; of the nodes with a defensive node health check strategy.&lt;/li&gt;
&lt;li&gt;Command parameter Validation:&lt;/li&gt;
&lt;li&gt;a &lt;b&gt;simple and user-friendly configuration section&lt;/b&gt; to configure all your clusters and support for &lt;b&gt;dependency-injection frameworks&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;You &lt;b&gt;can handle more than 1 cluster&lt;/b&gt; in your application &lt;/li&gt;
&lt;li&gt;You can configure what &lt;b&gt;ConnectionPool&lt;/b&gt; you want to use and its &lt;b&gt;internal parameters&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;You can choose what &lt;b&gt;EndpointManager&lt;/b&gt; you want to use&lt;/li&gt;
&lt;li&gt;You can &lt;b&gt;choose what Transport do you want to use&lt;/b&gt;, and even when using TBufferedTransport you can set the length of the buffer!&lt;/li&gt;
&lt;li&gt;You can managed (add, modify, remove) your Keyspaces and ColumnFamilies&lt;/li&gt;
&lt;li&gt;Some &lt;b&gt;Byte Enconder Helpers to avoid the need to create and managed your own&lt;/b&gt; (Long, UTF8, ASCII, GUID, UUID, Long, Int and so on).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Monitor features out of the box, now you can monitor all your connections to Cassandra simply by using Performance Monitor (native with Windows)&lt;/b&gt; by implementing &lt;a href="http://perfmoncounterhelper.codeplex.com" class="externalLink"&gt;PerformanceCounterHelper fwk&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; (*). Take the following screenshot as an example:&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=Aquiles&amp;DownloadId=226455" alt="Monitor.jpg" title="Monitor.jpg" /&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;Instructions on how to enable this feature are in &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Diagnostic.Extension&amp;referringTitle=Home"&gt;Aquiles.Diagnostic.Extension&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;(*) This feature was disabled on last refactor, it will be enabled back again soon.&lt;br /&gt;&lt;br /&gt;You can take a look at &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.VersionHistory&amp;referringTitle=Home"&gt;Version History&lt;/a&gt; for the lastest updates.
&lt;hr /&gt;

&lt;h1&gt;Commands Supported&lt;/h1&gt;
Aquiles supports all the Cassandra 0.7 &amp;amp; 0.8 commands. Check &lt;a href="http://wiki.apache.org/cassandra/API" class="externalLink"&gt;Cassandra API&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; on documentation about each one.&lt;br /&gt;
&lt;h1&gt;Easy Example of use&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Example 1&lt;/b&gt;:&lt;/li&gt;&lt;/ul&gt;
Suppose that you have a Cassandra instance configured in your App.Confg or Web.Config, and you named it &amp;quot;Cassandra1&amp;quot;. Suppose then, that there is a Keyspace called &amp;quot;TestKeyspace&amp;quot; and within that KeySpace there is a ColumnFamily called &amp;quot;TestColumnFamily&amp;quot;.&lt;br /&gt;Now, lets presume that you need to insert a new key &amp;quot;testKey&amp;quot; with a new Column called &amp;quot;testColumn&amp;quot; with a value of &amp;quot;testValue&amp;quot;. You may acomplish that with the following code.&lt;br /&gt;&lt;pre&gt;
string columnFamily = &amp;quot;TestColumnFamily&amp;quot;;
string keyspace = &amp;quot;TestKeyspace&amp;quot;;
string key = &amp;quot;testKey&amp;quot;;
string columnName = &amp;quot;testColumn&amp;quot;;
string columnValue = &amp;quot;testValue&amp;quot;;

// Insert statement
byte[] key = ByteEncoderHelper.LongEncoder.ToByteArray(i);
ColumnParent columnParent = new ColumnParent();
Column column = new Column() {
    Name = ByteEncoderHelper.UTF8Encoder.ToByteArray(columnName),
    Timestamp = UnixHelper.UnixTimestamp,
    Value = ByteEncoderHelper.UTF8Encoder.ToByteArray(columnValue),
};

columnParent.Column_family = columnFamily;

ICluster cluster = AquilesHelper.RetrieveCluster(&amp;quot;Cassandra1&amp;quot;);
cluster.Execute(new ExecutionBlock(delegate(CassandraClient client) {
    client.insert(key, columnParent, column, ConsistencyLevel.ONE);
    return null;
}), keyspace);

&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Example 2&lt;/b&gt;:&lt;/li&gt;&lt;/ul&gt;
Now, Lets continue with the assumption of the Example1 and that you need to retrieve the value inserted. Your code would be similar to:&lt;br /&gt;&lt;pre&gt;
// Get statement
byte[] key = ByteEncoderHelper.LongEncoder.ToByteArray(2);
ColumnPath columnPath = new ColumnPath()
{
    Column = ByteEncoderHelper.UTF8Encoder.ToByteArray(columnName),
    Column_family = columnFamily,
};
ICluster cluster = AquilesHelper.RetrieveCluster(&amp;quot;Cassandra1&amp;quot;);
object rtnValue = cluster.Execute(new ExecutionBlock(delegate(CassandraClient client)
{
    return client.get(key, columnPath, ConsistencyLevel.ONE);
}), keyspace);
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As you see, using this client is, somehow, like using a connection to a Database (Cassandra is not a database, but the syntax is similar). More examples can be found at each command.&lt;br /&gt;
&lt;h1&gt;Aquiles Configuration Section&lt;/h1&gt;Configuring Aquiles to use a Cassandra cluster is easy, add the following section into your App.Config (Web.config in case of ASPNET application):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;configuration&amp;gt;
  &amp;lt;configSections&amp;gt;
    &amp;lt;section name=&amp;quot;aquilesConfiguration&amp;quot; type=&amp;quot;Aquiles.Core.Configuration.AquilesConfigurationSection,Aquiles.Core&amp;quot;/&amp;gt;
  &amp;lt;/configSections&amp;gt;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; That the section name must be &amp;#39;&amp;#39;aquilesConfiguration&amp;#39;&amp;#39; and no other, or you Aquiles will not load and will throw a ConfigurationException when first time used.&lt;br /&gt;&lt;br /&gt;After that, you will only need to configure your cluster&amp;#39;s information like following:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
 &amp;lt;aquilesConfiguration&amp;gt;
    &amp;lt;clusters&amp;gt;
      &amp;lt;add friendlyName=&amp;quot;Keyspace1&amp;quot;&amp;gt;
        &amp;lt;connection poolType=&amp;quot;SIZECONTROLLEDPOOL&amp;quot; factoryType=&amp;quot;FRAMED&amp;quot;&amp;gt;
        &amp;lt;/connection&amp;gt;
        &amp;lt;endpointManager type=&amp;quot;ROUNDROBIN&amp;quot; defaultTimeout=&amp;quot;6000&amp;quot;&amp;gt;
          &amp;lt;cassandraEndpoints&amp;gt;
            &amp;lt;add address=&amp;quot;localhost&amp;quot; port=&amp;quot;9160&amp;quot;/&amp;gt;
          &amp;lt;/cassandraEndpoints&amp;gt;
        &amp;lt;/endpointManager&amp;gt;
      &amp;lt;/add&amp;gt;
    &amp;lt;/clusters&amp;gt;
  &amp;lt;/aquilesConfiguration&amp;gt;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;For further Configuration options, please see &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Configuration&amp;referringTitle=Home"&gt;Configuring Aquiles&lt;/a&gt;
&lt;hr /&gt;

&lt;h1&gt;Hints, Tricks, Best Practices&lt;/h1&gt;See a list of Hints, Tricks and Best Practices in this &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.BestPractices&amp;referringTitle=Home"&gt;document&lt;/a&gt;.&lt;br /&gt;
&lt;h1&gt;Frequently Asked Questions&lt;/h1&gt;Q: &lt;b&gt;Is this thing production ready?&lt;/b&gt;&lt;br /&gt;A: &lt;b&gt;Yes&lt;/b&gt;, im using it now on a heavy traffic site and it works great.&lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Sure it is production ready?&lt;/b&gt;&lt;br /&gt;A: Well, do a load test and &lt;b&gt;give us feedback&lt;/b&gt;. If you find something wrong, let us know. And if you fix it, consider sharing the code.&lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Are you going to support AVRO?&lt;/b&gt;&lt;br /&gt;A: &lt;b&gt;Maybe&lt;/b&gt;. At this time, the evolution of aquiles is driven by our needs, and we won&amp;#39;t upgrade our cassandra servers until the TTL is on the trunk (or any other compelling feature or killing bug). &lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Hey, it is Achilles!&lt;/b&gt;&lt;br /&gt;A: Well, not for us spanish speaking people. To be fair, it should be &lt;b&gt;Ἀχιλλεύς&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;I&amp;#39;m a bit confuse on your version numbers. How do you choose them?&lt;/b&gt;&lt;br /&gt;A: Well, yeap. I know it&amp;#39;s a bit confusing. Cassandra now have 3 version numbers: Major.Minor.patchLevel. Well, I have added 1 more version lvl to the end in order to properly detect what is the release we are talking about. Besides this, and since Cassandra does not change its Thrift interface too much, you will probably just need the Aquiles that match exactly the first 2 levels of version (those would be just Major.Minor). For example: Aquiles 0.7.0.X can support from Cassandra 0.7.0.0 to 0.7.6.0 and so on. If you need further assistance just ask on the discussion section.&lt;br /&gt;&lt;br /&gt;
&lt;h1&gt;Success Stories&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.javageneration.com/?p=318" class="externalLink"&gt;Chirper&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: twitter clone WebApp with .NET front-end and Cassandra NoSql back-end (&lt;b&gt;thanks Chaker Nakhli&lt;/b&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cipl.codeplex.com/" class="externalLink"&gt;Common Information Platform&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: Common abstraction over various data stores. (&lt;b&gt;thanks PatrickThompson&lt;/b&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.despegar.com/" class="externalLink"&gt;Despegar.com&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: Online Travel Agency. (&lt;b&gt;thanks All in Despegar&lt;/b&gt;)&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Donations&lt;/h1&gt;As you know, this project is free and it is supported and developed during my free time. However, I accept donations to help support Aquiles and accelerate development on it. &lt;a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;amp;business=4N67395RL2R4A&amp;amp;lc=US&amp;amp;item_name=Aquiles&amp;amp;item_number=Aquiles&amp;amp;currency_code=USD" class="externalLink"&gt;Click here to donate to Aquiles&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>javiercanillas</author><pubDate>Sat, 17 Sep 2011 14:28:42 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20110917022842P</guid></item><item><title>Updated Wiki: Home</title><link>http://aquiles.codeplex.com/wikipage?version=57</link><description>&lt;div class="wikidoc"&gt;&lt;h2&gt;Check download section, Huge refactor plus support for 0.8. Documentation still not updated, it will be soon.&lt;/h2&gt;
&lt;h1&gt;Description&lt;/h1&gt;
Aquiles is a .NET (v3.5 or above) Client for &lt;a href="http://cassandra.apache.org/" class="externalLink"&gt;Apache Cassandra&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; version 0.6.X or above using &lt;a href="http://wiki.apache.org/cassandra/API" class="externalLink"&gt;Thrift API&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Basically, It adds:
&lt;ul&gt;&lt;li&gt;A &lt;b&gt;.NET friendly interface&lt;/b&gt; to cassandra operations. You operates against cassandra as you would operate against an SQL (See examples)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Connection Pool&lt;/b&gt; with warm-up and size control capabilities&lt;/li&gt;
&lt;li&gt;An &lt;b&gt;Endpoint Manager&lt;/b&gt; to manage all the entrypoint nodes to one cluster. It will automatically &lt;b&gt;distribute the connections against all the cluster endpoints&lt;/b&gt; defined, and will &lt;b&gt;check for healthiness&lt;/b&gt; of the nodes with a defensive node health check strategy.&lt;/li&gt;
&lt;li&gt;Command parameter Validation:&lt;/li&gt;
&lt;li&gt;a &lt;b&gt;simple and user-friendly configuration section&lt;/b&gt; to configure all your clusters and support for &lt;b&gt;dependency-injection frameworks&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;You &lt;b&gt;can handle more than 1 cluster&lt;/b&gt; in your application &lt;/li&gt;
&lt;li&gt;You can configure what &lt;b&gt;ConnectionPool&lt;/b&gt; you want to use and its &lt;b&gt;internal parameters&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;You can choose what &lt;b&gt;EndpointManager&lt;/b&gt; you want to use&lt;/li&gt;
&lt;li&gt;You can &lt;b&gt;choose what Transport do you want to use&lt;/b&gt;, and even when using TBufferedTransport you can set the length of the buffer!&lt;/li&gt;
&lt;li&gt;You can managed (add, modify, remove) your Keyspaces and ColumnFamilies&lt;/li&gt;
&lt;li&gt;Some &lt;b&gt;Byte Enconder Helpers to avoid the need to create and managed your own&lt;/b&gt; (Long, UTF8, ASCII, GUID, UUID, Long, Int and so on).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Monitor features out of the box, now you can monitor all your connections to Cassandra simply by using Performance Monitor (native with Windows)&lt;/b&gt; by implementing &lt;a href="http://perfmoncounterhelper.codeplex.com" class="externalLink"&gt;PerformanceCounterHelper fwk&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; (*). Take the following screenshot as an example:&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=Aquiles&amp;DownloadId=226455" alt="Monitor.jpg" title="Monitor.jpg" /&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;Instructions on how to enable this feature are in &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Diagnostic.Extension&amp;referringTitle=Home"&gt;Aquiles.Diagnostic.Extension&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;(*) This feature was disabled on last refactor, it will be enabled back again soon.&lt;br /&gt;&lt;br /&gt;You can take a look at &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.VersionHistory&amp;referringTitle=Home"&gt;Version History&lt;/a&gt; for the lastest updates.
&lt;hr /&gt;

&lt;h1&gt;Commands Supported&lt;/h1&gt;
Aquiles supports all the Cassandra 0.7 &amp;amp; 0.8 commands. Check &lt;a href="http://wiki.apache.org/cassandra/API" class="externalLink"&gt;Cassandra API&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; on documentation about each one.&lt;br /&gt;
&lt;h1&gt;Easy Example of use&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Example 1&lt;/b&gt;:&lt;/li&gt;&lt;/ul&gt;
Suppose that you have a Cassandra instance configured in your App.Confg or Web.Config, and you named it &amp;quot;Cassandra1&amp;quot;. Suppose then, that there is a Keyspace called &amp;quot;TestKeyspace&amp;quot; and within that KeySpace there is a ColumnFamily called &amp;quot;TestColumnFamily&amp;quot;.&lt;br /&gt;Now, lets presume that you need to insert a new key &amp;quot;testKey&amp;quot; with a new Column called &amp;quot;testColumn&amp;quot; with a value of &amp;quot;testValue&amp;quot;. You may acomplish that with the following code.&lt;br /&gt;&lt;pre&gt;
string columnFamily = &amp;quot;TestColumnFamily&amp;quot;;
string keyspace = &amp;quot;TestKeyspace&amp;quot;;
string key = &amp;quot;testKey&amp;quot;;
string columnName = &amp;quot;testColumn&amp;quot;;
string columnValue = &amp;quot;testValue&amp;quot;;

// Insert statement
byte[] key = ByteEncoderHelper.LongEncoder.ToByteArray(i);
ColumnParent columnParent = new ColumnParent();
Column column = new Column() {
    Name = ByteEncoderHelper.UTF8Encoder.ToByteArray(columnName),
    Timestamp = UnixHelper.UnixTimestamp,
    Value = ByteEncoderHelper.UTF8Encoder.ToByteArray(columnValue),
};

columnParent.Column_family = columnFamily;

ICluster cluster = AquilesHelper.RetrieveCluster(&amp;quot;Cassandra1&amp;quot;);
cluster.Execute(new ExecutionBlock(delegate(CassandraClient client) {
    client.insert(key, columnParent, column, ConsistencyLevel.ONE);
    return null;
}), keyspace);

&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Example 2&lt;/b&gt;:&lt;/li&gt;&lt;/ul&gt;
Now, Lets continue with the assumption of the Example1 and that you need to retrieve the value inserted. Your code would be similar to:&lt;br /&gt;&lt;pre&gt;
// Get statement
byte[] key = ByteEncoderHelper.LongEncoder.ToByteArray(2);
ColumnPath columnPath = new ColumnPath()
{
    Column = ByteEncoderHelper.UTF8Encoder.ToByteArray(columnName),
    Column_family = columnFamily,
};
ICluster cluster = AquilesHelper.RetrieveCluster(&amp;quot;Cassandra1&amp;quot;);
object rtnValue = cluster.Execute(new ExecutionBlock(delegate(CassandraClient client)
{
    return client.get(key, columnPath, ConsistencyLevel.ONE);
}), keyspace);
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As you see, using this client is, somehow, like using a connection to a Database (Cassandra is not a database, but the syntax is similar). More examples can be found at each command.&lt;br /&gt;
&lt;h1&gt;Aquiles Configuration Section&lt;/h1&gt;Configuring Aquiles to use a Cassandra cluster is easy, add the following section into your App.Config (Web.config in case of ASPNET application):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;configuration&amp;gt;
  &amp;lt;configSections&amp;gt;
    &amp;lt;section name=&amp;quot;aquilesConfiguration&amp;quot; type=&amp;quot;Aquiles.Configuration.AquilesConfigurationSection,Aquiles&amp;quot;/&amp;gt;
  &amp;lt;/configSections&amp;gt;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; That the section name must be &amp;#39;&amp;#39;aquilesConfiguration&amp;#39;&amp;#39; and no other, or you Aquiles will not load and will throw a ConfigurationException when first time used.&lt;br /&gt;&lt;br /&gt;After that, you will only need to configure your cluster&amp;#39;s information like following:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
 &amp;lt;aquilesConfiguration&amp;gt;
    &amp;lt;clusters&amp;gt;
      &amp;lt;add friendlyName=&amp;quot;Keyspace1&amp;quot;&amp;gt;
        &amp;lt;connection poolType=&amp;quot;SIZECONTROLLEDPOOL&amp;quot; factoryType=&amp;quot;BUFFERED&amp;quot;&amp;gt;
        &amp;lt;/connection&amp;gt;
        &amp;lt;endpointManager type=&amp;quot;ROUNDROBIN&amp;quot; defaultTimeout=&amp;quot;6000&amp;quot;&amp;gt;
          &amp;lt;cassandraEndpoints&amp;gt;
            &amp;lt;add address=&amp;quot;localhost&amp;quot; port=&amp;quot;9160&amp;quot;/&amp;gt;
          &amp;lt;/cassandraEndpoints&amp;gt;
        &amp;lt;/endpointManager&amp;gt;
      &amp;lt;/add&amp;gt;
    &amp;lt;/clusters&amp;gt;
  &amp;lt;/aquilesConfiguration&amp;gt;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;For further Configuration options, please see &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Configuration&amp;referringTitle=Home"&gt;Configuring Aquiles&lt;/a&gt;
&lt;hr /&gt;

&lt;h1&gt;Hints, Tricks, Best Practices&lt;/h1&gt;See a list of Hints, Tricks and Best Practices in this &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.BestPractices&amp;referringTitle=Home"&gt;document&lt;/a&gt;.&lt;br /&gt;
&lt;h1&gt;Frequently Asked Questions&lt;/h1&gt;Q: &lt;b&gt;Is this thing production ready?&lt;/b&gt;&lt;br /&gt;A: &lt;b&gt;Yes&lt;/b&gt;, im using it now on a heavy traffic site and it works great.&lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Sure it is production ready?&lt;/b&gt;&lt;br /&gt;A: Well, do a load test and &lt;b&gt;give us feedback&lt;/b&gt;. If you find something wrong, let us know. And if you fix it, consider sharing the code.&lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Are you going to support AVRO?&lt;/b&gt;&lt;br /&gt;A: &lt;b&gt;Maybe&lt;/b&gt;. At this time, the evolution of aquiles is driven by our needs, and we won&amp;#39;t upgrade our cassandra servers until the TTL is on the trunk (or any other compelling feature or killing bug). &lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Hey, it is Achilles!&lt;/b&gt;&lt;br /&gt;A: Well, not for us spanish speaking people. To be fair, it should be &lt;b&gt;Ἀχιλλεύς&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;I&amp;#39;m a bit confuse on your version numbers. How do you choose them?&lt;/b&gt;&lt;br /&gt;A: Well, yeap. I know it&amp;#39;s a bit confusing. Cassandra now have 3 version numbers: Major.Minor.patchLevel. Well, I have added 1 more version lvl to the end in order to properly detect what is the release we are talking about. Besides this, and since Cassandra does not change its Thrift interface too much, you will probably just need the Aquiles that match exactly the first 2 levels of version (those would be just Major.Minor). For example: Aquiles 0.7.0.X can support from Cassandra 0.7.0.0 to 0.7.6.0 and so on. If you need further assistance just ask on the discussion section.&lt;br /&gt;&lt;br /&gt;
&lt;h1&gt;Success Stories&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.javageneration.com/?p=318" class="externalLink"&gt;Chirper&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: twitter clone WebApp with .NET front-end and Cassandra NoSql back-end (&lt;b&gt;thanks Chaker Nakhli&lt;/b&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cipl.codeplex.com/" class="externalLink"&gt;Common Information Platform&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: Common abstraction over various data stores. (&lt;b&gt;thanks PatrickThompson&lt;/b&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.despegar.com/" class="externalLink"&gt;Despegar.com&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: Online Travel Agency. (&lt;b&gt;thanks All in Despegar&lt;/b&gt;)&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Donations&lt;/h1&gt;As you know, this project is free and it is supported and developed during my free time. However, I accept donations to help support Aquiles and accelerate development on it. &lt;a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;amp;business=4N67395RL2R4A&amp;amp;lc=US&amp;amp;item_name=Aquiles&amp;amp;item_number=Aquiles&amp;amp;currency_code=USD" class="externalLink"&gt;Click here to donate to Aquiles&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>javiercanillas</author><pubDate>Mon, 22 Aug 2011 21:15:14 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20110822091514P</guid></item><item><title>Updated Wiki: Aquiles.BestPractices</title><link>http://aquiles.codeplex.com/wikipage?title=Aquiles.BestPractices&amp;version=6</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Hints&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;On a performance demanded application, it is recomended to added the following call to its startup process in order not to penalize the first operation attempt against Aquiles.&lt;/li&gt;&lt;/ul&gt;
&lt;pre&gt;
AquilesHelper.Initialize();
&lt;/pre&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;When not borrowing a connection from the cluster, you let the cluster to decide when to open the connection to execute your command. By doing so, you actually enable a capability that has the &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Core.Cluster.Impl.DefaultCluster&amp;referringTitle=Aquiles.BestPractices"&gt;Aquiles.Core.Cluster.Impl.DefaultCluster&lt;/a&gt; object to retry the command in case it detects that the exception caught might be raised by a closed port or a temporal disconnection. This is advice to do on most every situation and is the recommendation. For example:&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;pre&gt;
// Get statement
byte[] key = ByteEncoderHelper.LongEncoder.ToByteArray(2);
ColumnPath columnPath = new ColumnPath()
{
    Column = ByteEncoderHelper.UTF8Encoder.ToByteArray(columnName),
    Column_family = columnFamily,
};
ICluster cluster = AquilesHelper.RetrieveCluster(&amp;quot;Cassandra1&amp;quot;);
object rtnValue = cluster.Execute(new ExecutionBlock(delegate(CassandraClient client)
{
    return client.get(key, columnPath, ConsistencyLevel.ONE);
}), keyspace);
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Although, there are situations that needs to be handled separately. On these cases, AquilesCluster has 3 methods: &amp;quot;Borrow&amp;quot;, &amp;quot;Release&amp;quot; and &amp;quot;Invalidate&amp;quot; that will let you do what you need. Take in mind that &amp;quot;borrowing&amp;quot; a connection from a cluster detach it from its internal pool, so after executing such methods the client owns the connection. It is recommended not to close it and it should be taken back into the internal cluster pool by doing &amp;quot;release&amp;quot; if you think that the client is healthy or &amp;quot;invalidate&amp;quot; if you prefer to destroy it.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;For production environments, it is recomended to use &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Connection.Factory.BufferedTransportConnectionFactory&amp;referringTitle=Aquiles.BestPractices"&gt;Aquiles.Connection.Factory.BufferedTransportConnectionFactory&lt;/a&gt; instead of &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Connection.Factory.DefaultTransportConnectionFactory&amp;referringTitle=Aquiles.BestPractices"&gt;Aquiles.Connection.Factory.DefaultTransportConnectionFactory&lt;/a&gt; because it will use a Buffer to hold the information before sending the command to the server. Doing so, you avoid several calls into your SO kernel, making a performance improvement.&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Best Practices&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;If you are going to make several commands against a cluster, it is recommended that you prepare all the commands outside the scope of the opened connection, doing so you will minimize the time you are holding a connection from the pool. Therefore, on a performance demand scenario you will avoid opening a large number of connection. For example:&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;pre&gt;
string CLUSTERNAME = &amp;quot;Cassandra1&amp;quot;;
KsDef keyspaceDefinition = new KsDef();
keyspaceDefinition.Name = &amp;quot;exampleKeyspace&amp;quot;;
keyspaceDefinition.Replication_factor = 1;
keyspaceDefinition.Strategy_class = &amp;quot;org.apache.cassandra.locator.SimpleStrategy&amp;quot;;
keyspaceDefinition.Cf_defs = new List&amp;lt;CfDef&amp;gt;();
CfDef columnFamilyDefinition = new CfDef();
columnFamilyDefinition.Keyspace = keyspaceDefinition.Name;
columnFamilyDefinition.Comparator_type = &amp;quot;BytesType&amp;quot;;
columnFamilyDefinition.Key_cache_size = 20000;
columnFamilyDefinition.Row_cache_save_period_in_seconds = 0;
columnFamilyDefinition.Key_cache_save_period_in_seconds = 3600;
columnFamilyDefinition.Memtable_flush_after_mins = 59;
columnFamilyDefinition.Memtable_throughput_in_mb = 255;
columnFamilyDefinition.Memtable_operations_in_millions = 0.29;
columnFamilyDefinition.Name = &amp;quot;exampleCF&amp;quot;;

ICluster cluster = AquilesHelper.RetrieveCluster(CLUSTERNAME);

ExecutionBlock describe_keyspaces = new ExecutionBlock(delegate(CassandraClient client)
{
    return client.describe_keyspaces();
});

List&amp;lt;KsDef&amp;gt; keyspaceDefinitions = (List&amp;lt;KsDef&amp;gt;)cluster.Execute(describe_keyspaces);
bool keyspaceExists = false;
bool columnFamilyExists = false;
if (keyspaceDefinitions != null)
{
    foreach (KsDef ksDef in keyspaceDefinitions)
    {
        if (ksDef.Name.CompareTo(keyspaceDefinition.Name) == 0)
        {
            keyspaceExists = true;
            List&amp;lt;CfDef&amp;gt; columnFamilyDefinitions = ksDef.Cf_defs;
            if (columnFamilyDefinitions != null)
            {
                foreach (CfDef cfDef in columnFamilyDefinitions)
                {
                    if (cfDef.Name.CompareTo(columnFamilyDefinition.Name) == 0)
                    {
                        columnFamilyExists = true;
                        break;
                    }
                }
            }
            break;
        }
    }
}
try
{
    if (!keyspaceExists)
    {
        ExecutionBlock create_keyspace = new ExecutionBlock(delegate(CassandraClient client)
        {
            return client.system_add_keyspace(keyspaceDefinition);
        });
        cluster.Execute(create_keyspace);
    }

    if (!columnFamilyExists)
    {
        ExecutionBlock create_columnFamily = new ExecutionBlock(delegate(CassandraClient client)
        {
            return client.system_add_column_family(columnFamilyDefinition);
        });
        cluster.Execute(create_columnFamily, keyspaceDefinition.Name);
    }
}
finally
{
    ExecutionBlock drop_keyspace = new ExecutionBlock(delegate(CassandraClient client)
    {
        return client.system_drop_keyspace(keyspaceDefinition.Name);
    });
    cluster.Execute(drop_keyspace);
}
&lt;/pre&gt;&lt;br /&gt;
&lt;h1&gt;Tricks&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;When using &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Connection.Factory.BufferedTransportConnectionFactory&amp;referringTitle=Aquiles.BestPractices"&gt;Aquiles.Connection.Factory.BufferedTransportConnectionFactory&lt;/a&gt;, if you want a good performance tune, consider adjusting the buffer size to a number accodingly to the average object size you are putting into that cluster, doing so you will hold the command in memory till its is ready to be transmitted. Be careful of this Trick, since a too large buffer size will eat up a lot of memory.&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>javiercanillas</author><pubDate>Mon, 22 Aug 2011 21:00:18 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Aquiles.BestPractices 20110822090018P</guid></item><item><title>Updated Wiki: Home</title><link>http://aquiles.codeplex.com/wikipage?version=56</link><description>&lt;div class="wikidoc"&gt;&lt;h2&gt;Check download section, Huge refactor plus support for 0.8. Documentation still not updated, it will be soon.&lt;/h2&gt;
&lt;h1&gt;Description&lt;/h1&gt;
Aquiles is a .NET (v3.5 or above) Client for &lt;a href="http://cassandra.apache.org/" class="externalLink"&gt;Apache Cassandra&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; version 0.6.X or above using &lt;a href="http://wiki.apache.org/cassandra/API" class="externalLink"&gt;Thrift API&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Basically, It adds:
&lt;ul&gt;&lt;li&gt;A &lt;b&gt;.NET friendly interface&lt;/b&gt; to cassandra operations. You operates against cassandra as you would operate against an SQL (See examples)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Connection Pool&lt;/b&gt; with warm-up and size control capabilities&lt;/li&gt;
&lt;li&gt;An &lt;b&gt;Endpoint Manager&lt;/b&gt; to manage all the entrypoint nodes to one cluster. It will automatically &lt;b&gt;distribute the connections against all the cluster endpoints&lt;/b&gt; defined, and will &lt;b&gt;check for healthiness&lt;/b&gt; of the nodes with a defensive node health check strategy.&lt;/li&gt;
&lt;li&gt;Command parameter Validation:&lt;/li&gt;
&lt;li&gt;a &lt;b&gt;simple and user-friendly configuration section&lt;/b&gt; to configure all your clusters and support for &lt;b&gt;dependency-injection frameworks&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;You &lt;b&gt;can handle more than 1 cluster&lt;/b&gt; in your application &lt;/li&gt;
&lt;li&gt;You can configure what &lt;b&gt;ConnectionPool&lt;/b&gt; you want to use and its &lt;b&gt;internal parameters&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;You can choose what &lt;b&gt;EndpointManager&lt;/b&gt; you want to use&lt;/li&gt;
&lt;li&gt;You can &lt;b&gt;choose what Transport do you want to use&lt;/b&gt;, and even when using TBufferedTransport you can set the length of the buffer!&lt;/li&gt;
&lt;li&gt;You can managed (add, modify, remove) your Keyspaces and ColumnFamilies&lt;/li&gt;
&lt;li&gt;Some &lt;b&gt;Byte Enconder Helpers to avoid the need to create and managed your own&lt;/b&gt; (Long, UTF8, ASCII, GUID, UUID, Long, Int and so on).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Monitor features out of the box, now you can monitor all your connections to Cassandra simply by using Performance Monitor (native with Windows)&lt;/b&gt; by implementing &lt;a href="http://perfmoncounterhelper.codeplex.com" class="externalLink"&gt;PerformanceCounterHelper fwk&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; (*). Take the following screenshot as an example:&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=Aquiles&amp;DownloadId=226455" alt="Monitor.jpg" title="Monitor.jpg" /&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;Instructions on how to enable this feature are in &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Diagnostic.Extension&amp;referringTitle=Home"&gt;Aquiles.Diagnostic.Extension&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;(*) This feature was disabled on last refactor, it will be enabled back again soon.&lt;br /&gt;&lt;br /&gt;You can take a look at &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.VersionHistory&amp;referringTitle=Home"&gt;Version History&lt;/a&gt; for the lastest updates.
&lt;hr /&gt;

&lt;h1&gt;Commands Supported&lt;/h1&gt;
Aquiles supports all the Cassandra 0.7 &amp;amp; 0.8 commands. Check &lt;a href="http://wiki.apache.org/cassandra/API" class="externalLink"&gt;Cassandra API&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; on documentation about each one.&lt;br /&gt;
&lt;h1&gt;Easy Example of use&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Example 1&lt;/b&gt;:&lt;/li&gt;&lt;/ul&gt;
Suppose that you have a Cassandra instance configured in your App.Confg or Web.Config, and you named it &amp;quot;Cassandra1&amp;quot;. Suppose then, that there is a Keyspace called &amp;quot;TestKeyspace&amp;quot; and within that KeySpace there is a ColumnFamily called &amp;quot;TestColumnFamily&amp;quot;.&lt;br /&gt;Now, lets presume that you need to insert a new key &amp;quot;testKey&amp;quot; with a new Column called &amp;quot;testColumn&amp;quot; with a value of &amp;quot;testValue&amp;quot;. You may acomplish that with the following code.&lt;br /&gt;&lt;pre&gt;
string columnFamily = &amp;quot;TestColumnFamily&amp;quot;;
string keyspace = &amp;quot;TestKeyspace&amp;quot;;
string key = &amp;quot;testKey&amp;quot;;
string columnName = &amp;quot;testColumn&amp;quot;;
string columnValue = &amp;quot;testValue&amp;quot;;

// Insert statement
byte[] key = ByteEncoderHelper.LongEncoder.ToByteArray(i);
ColumnParent columnParent = new ColumnParent();
Column column = new Column() {
    Name = ByteEncoderHelper.UTF8Encoder.ToByteArray(columnName),
    Timestamp = UnixHelper.UnixTimestamp,
    Value = ByteEncoderHelper.UTF8Encoder.ToByteArray(columnValue),
};

columnParent.Column_family = columnFamily;

ICluster cluster = AquilesHelper.RetrieveCluster(&amp;quot;Cassandra1&amp;quot;);
cluster.Execute(new ExecutionBlock(delegate(CassandraClient client) {
    client.insert(key, columnParent, column, ConsistencyLevel.ONE);
    return null;
}), keyspace);

&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Example 2&lt;/b&gt;:&lt;/li&gt;&lt;/ul&gt;
Now, Lets continue with the assumption of the Example1 and that you need to retrieve the value inserted. Your code would be similar to:&lt;br /&gt;&lt;pre&gt;
// Get statement
byte[] key = ByteEncoderHelper.LongEncoder.ToByteArray(2);
ColumnPath columnPath = new ColumnPath()
{
    Column = ByteEncoderHelper.UTF8Encoder.ToByteArray(columnName),
    Column_family = columnFamily,
};
ICluster cluster = AquilesHelper.RetrieveCluster(&amp;quot;Cassandra1&amp;quot;);
object rtnValue = cluster.Execute(new ExecutionBlock(delegate(CassandraClient client)
{
    return client.get(key, columnPath, ConsistencyLevel.ONE);
}), keyspace);
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As you see, using this client is, somehow, like using a connection to a Database (Cassandra is not a database, but the syntax is similar). More examples can be found at each command.&lt;br /&gt;
&lt;h1&gt;Aquiles Configuration Section&lt;/h1&gt;Configuring Aquiles to use a Cassandra cluster is easy, add the following section into your App.Config (Web.config in case of ASPNET application):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;configuration&amp;gt;
  &amp;lt;configSections&amp;gt;
    &amp;lt;section name=&amp;quot;aquilesConfiguration&amp;quot; type=&amp;quot;Aquiles.Configuration.AquilesConfigurationSection,Aquiles&amp;quot;/&amp;gt;
  &amp;lt;/configSections&amp;gt;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; That the section name must be &amp;#39;&amp;#39;aquilesConfiguration&amp;#39;&amp;#39; and no other, or you Aquiles will not load and will throw a ConfigurationException when first time used.&lt;br /&gt;&lt;br /&gt;After that, you will only need to configure your cluster&amp;#39;s information like following:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
 &amp;lt;aquilesConfiguration&amp;gt;
    &amp;lt;clusters&amp;gt;
      &amp;lt;add friendlyName=&amp;quot;Keyspace1&amp;quot;&amp;gt;
        &amp;lt;connection poolType=&amp;quot;SIZECONTROLLEDPOOL&amp;quot; factoryType=&amp;quot;BUFFERED&amp;quot;&amp;gt;
        &amp;lt;/connection&amp;gt;
        &amp;lt;endpointManager type=&amp;quot;ROUNDROBIN&amp;quot; defaultTimeout=&amp;quot;6000&amp;quot;&amp;gt;
          &amp;lt;cassandraEndpoints&amp;gt;
            &amp;lt;add address=&amp;quot;localhost&amp;quot; port=&amp;quot;9160&amp;quot;/&amp;gt;
          &amp;lt;/cassandraEndpoints&amp;gt;
        &amp;lt;/endpointManager&amp;gt;
      &amp;lt;/add&amp;gt;
    &amp;lt;/clusters&amp;gt;
  &amp;lt;/aquilesConfiguration&amp;gt;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;For further Configuration options, please see &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Configuration&amp;referringTitle=Home"&gt;Configuring Aquiles&lt;/a&gt;
&lt;hr /&gt;

&lt;h1&gt;Hints, Tricks, Best Practices&lt;/h1&gt;See a list of Hints, Tricks and Best Practices in this &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.BestPractices&amp;referringTitle=Home"&gt;document&lt;/a&gt;.&lt;br /&gt;
&lt;h1&gt;Frequently Asked Questions&lt;/h1&gt;Q: &lt;b&gt;Is this thing production ready?&lt;/b&gt;&lt;br /&gt;A: &lt;b&gt;Yes&lt;/b&gt;, im using it now on a heavy traffic site and it works great.&lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Sure it is production ready?&lt;/b&gt;&lt;br /&gt;A: Well, do a load test and &lt;b&gt;give us feedback&lt;/b&gt;. If you find something wrong, let us know. And if you fix it, consider sharing the code.&lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Are you going to support AVRO?&lt;/b&gt;&lt;br /&gt;A: &lt;b&gt;Maybe&lt;/b&gt;. At this time, the evolution of aquiles is driven by our needs, and we won&amp;#39;t upgrade our cassandra servers until the TTL is on the trunk (or any other compelling feature or killing bug). &lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Hey, it is Achilles!&lt;/b&gt;&lt;br /&gt;A: Well, not for us spanish speaking people. To be fair, it should be &lt;b&gt;Ἀχιλλεύς&lt;/b&gt;&lt;br /&gt;
&lt;h1&gt;Success Stories&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.javageneration.com/?p=318" class="externalLink"&gt;Chirper&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: twitter clone WebApp with .NET front-end and Cassandra NoSql back-end (&lt;b&gt;thanks Chaker Nakhli&lt;/b&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cipl.codeplex.com/" class="externalLink"&gt;Common Information Platform&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: Common abstraction over various data stores. (&lt;b&gt;thanks PatrickThompson&lt;/b&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.despegar.com/" class="externalLink"&gt;Despegar.com&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: Online Travel Agency. (&lt;b&gt;thanks All in Despegar&lt;/b&gt;)&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Donations&lt;/h1&gt;As you know, this project is free and it is supported and developed during my free time. However, I accept donations to help support Aquiles and accelerate development on it. &lt;a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;amp;business=4N67395RL2R4A&amp;amp;lc=US&amp;amp;item_name=Aquiles&amp;amp;item_number=Aquiles&amp;amp;currency_code=USD" class="externalLink"&gt;Click here to donate to Aquiles&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>javiercanillas</author><pubDate>Mon, 22 Aug 2011 20:52:07 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20110822085207P</guid></item><item><title>Updated Wiki: Home</title><link>http://aquiles.codeplex.com/wikipage?version=55</link><description>&lt;div class="wikidoc"&gt;&lt;h2&gt;Check download section, Huge refactor plus support for 0.8. Documentation still not updated, it will be soon.&lt;/h2&gt;
&lt;h1&gt;Description&lt;/h1&gt;
Aquiles is a .NET (v3.5 or above) Client for &lt;a href="http://cassandra.apache.org/" class="externalLink"&gt;Apache Cassandra&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; version 0.6.X or above using &lt;a href="http://wiki.apache.org/cassandra/API" class="externalLink"&gt;Thrift API&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Basically, It adds:
&lt;ul&gt;&lt;li&gt;A &lt;b&gt;.NET friendly interface&lt;/b&gt; to cassandra operations. You operates against cassandra as you would operate against an SQL (See examples)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Connection Pool&lt;/b&gt; with warm-up and size control capabilities&lt;/li&gt;
&lt;li&gt;An &lt;b&gt;Endpoint Manager&lt;/b&gt; to manage all the entrypoint nodes to one cluster. It will automatically &lt;b&gt;distribute the connections against all the cluster endpoints&lt;/b&gt; defined, and will &lt;b&gt;check for healthiness&lt;/b&gt; of the nodes with a defensive node health check strategy.&lt;/li&gt;
&lt;li&gt;Command parameter Validation:&lt;/li&gt;
&lt;li&gt;a &lt;b&gt;simple and user-friendly configuration section&lt;/b&gt; to configure all your clusters and support for &lt;b&gt;dependency-injection frameworks&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;You &lt;b&gt;can handle more than 1 cluster&lt;/b&gt; in your application &lt;/li&gt;
&lt;li&gt;You can configure what &lt;b&gt;ConnectionPool&lt;/b&gt; you want to use and its &lt;b&gt;internal parameters&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;You can choose what &lt;b&gt;EndpointManager&lt;/b&gt; you want to use&lt;/li&gt;
&lt;li&gt;You can &lt;b&gt;choose what Transport do you want to use&lt;/b&gt;, and even when using TBufferedTransport you can set the length of the buffer!&lt;/li&gt;
&lt;li&gt;You can managed (add, modify, remove) your Keyspaces and ColumnFamilies&lt;/li&gt;
&lt;li&gt;Some &lt;b&gt;Byte Enconder Helpers to avoid the need to create and managed your own&lt;/b&gt; (Long, UTF8, ASCII, GUID, UUID, Long, Int and so on).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Monitor features out of the box, now you can monitor all your connections to Cassandra simply by using Performance Monitor (native with Windows)&lt;/b&gt; by implementing &lt;a href="http://perfmoncounterhelper.codeplex.com" class="externalLink"&gt;PerformanceCounterHelper fwk&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; (*). Take the following screenshot as an example:&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=Aquiles&amp;DownloadId=226455" alt="Monitor.jpg" title="Monitor.jpg" /&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;Instructions on how to enable this feature are in &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Diagnostic.Extension&amp;referringTitle=Home"&gt;Aquiles.Diagnostic.Extension&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;(*) This feature was disabled on last refactor, it will be enabled back again soon.&lt;br /&gt;&lt;br /&gt;You can take a look at &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.VersionHistory&amp;referringTitle=Home"&gt;Version History&lt;/a&gt; for the lastest updates.
&lt;hr /&gt;

&lt;h1&gt;Commands Supported&lt;/h1&gt;
Aquiles supports all the Cassandra 0.7 &amp;amp; 0.8 commands. Check Cassandra API on documentation about each one.&lt;br /&gt;
&lt;h1&gt;Easy Example of use&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Example 1&lt;/b&gt;:&lt;/li&gt;&lt;/ul&gt;
Suppose that you have a Cassandra instance configured in your App.Confg or Web.Config, and you named it &amp;quot;Cassandra1&amp;quot;. Suppose then, that there is a Keyspace called &amp;quot;TestKeyspace&amp;quot; and within that KeySpace there is a ColumnFamily called &amp;quot;TestColumnFamily&amp;quot;.&lt;br /&gt;Now, lets presume that you need to insert a new key &amp;quot;testKey&amp;quot; with a new Column called &amp;quot;testColumn&amp;quot; with a value of &amp;quot;testValue&amp;quot;. You may acomplish that with the following code.&lt;br /&gt;&lt;pre&gt;
string columnFamily = &amp;quot;TestColumnFamily&amp;quot;;
string keyspace = &amp;quot;TestKeyspace&amp;quot;;
string key = &amp;quot;testKey&amp;quot;;
string columnName = &amp;quot;testColumn&amp;quot;;
string columnValue = &amp;quot;testValue&amp;quot;;

// Insert statement
byte[] key = ByteEncoderHelper.LongEncoder.ToByteArray(i);
ColumnParent columnParent = new ColumnParent();
Column column = new Column() {
    Name = ByteEncoderHelper.UTF8Encoder.ToByteArray(columnName),
    Timestamp = UnixHelper.UnixTimestamp,
    Value = ByteEncoderHelper.UTF8Encoder.ToByteArray(columnValue),
};

columnParent.Column_family = columnFamily;

ICluster cluster = AquilesHelper.RetrieveCluster(&amp;quot;Cassandra1&amp;quot;);
cluster.Execute(new ExecutionBlock(delegate(CassandraClient client) {
    client.insert(key, columnParent, column, ConsistencyLevel.ONE);
    return null;
}), keyspace);

&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Example 2&lt;/b&gt;:&lt;/li&gt;&lt;/ul&gt;
Now, Lets continue with the assumption of the Example1 and that you need to retrieve the value inserted. Your code would be similar to:&lt;br /&gt;&lt;pre&gt;
// Get statement
byte[] key = ByteEncoderHelper.LongEncoder.ToByteArray(2);
ColumnPath columnPath = new ColumnPath()
{
    Column = ByteEncoderHelper.UTF8Encoder.ToByteArray(columnName),
    Column_family = columnFamily,
};
ICluster cluster = AquilesHelper.RetrieveCluster(&amp;quot;Cassandra1&amp;quot;);
object rtnValue = cluster.Execute(new ExecutionBlock(delegate(CassandraClient client)
{
    return client.get(key, columnPath, ConsistencyLevel.ONE);
}), keyspace);
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As you see, using this client is, somehow, like using a connection to a Database (Cassandra is not a database, but the syntax is similar). More examples can be found at each command.&lt;br /&gt;
&lt;h1&gt;Aquiles Configuration Section&lt;/h1&gt;Configuring Aquiles to use a Cassandra cluster is easy, add the following section into your App.Config (Web.config in case of ASPNET application):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;configuration&amp;gt;
  &amp;lt;configSections&amp;gt;
    &amp;lt;section name=&amp;quot;aquilesConfiguration&amp;quot; type=&amp;quot;Aquiles.Configuration.AquilesConfigurationSection,Aquiles&amp;quot;/&amp;gt;
  &amp;lt;/configSections&amp;gt;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; That the section name must be &amp;#39;&amp;#39;aquilesConfiguration&amp;#39;&amp;#39; and no other, or you Aquiles will not load and will throw a ConfigurationException when first time used.&lt;br /&gt;&lt;br /&gt;After that, you will only need to configure your cluster&amp;#39;s information like following:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
 &amp;lt;aquilesConfiguration&amp;gt;
    &amp;lt;clusters&amp;gt;
      &amp;lt;add friendlyName=&amp;quot;Keyspace1&amp;quot;&amp;gt;
        &amp;lt;connection poolType=&amp;quot;SIZECONTROLLEDPOOL&amp;quot; factoryType=&amp;quot;BUFFERED&amp;quot;&amp;gt;
        &amp;lt;/connection&amp;gt;
        &amp;lt;endpointManager type=&amp;quot;ROUNDROBIN&amp;quot; defaultTimeout=&amp;quot;6000&amp;quot;&amp;gt;
          &amp;lt;cassandraEndpoints&amp;gt;
            &amp;lt;add address=&amp;quot;localhost&amp;quot; port=&amp;quot;9160&amp;quot;/&amp;gt;
          &amp;lt;/cassandraEndpoints&amp;gt;
        &amp;lt;/endpointManager&amp;gt;
      &amp;lt;/add&amp;gt;
    &amp;lt;/clusters&amp;gt;
  &amp;lt;/aquilesConfiguration&amp;gt;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;For further Configuration options, please see &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Configuration&amp;referringTitle=Home"&gt;Configuring Aquiles&lt;/a&gt;
&lt;hr /&gt;

&lt;h1&gt;Hints, Tricks, Best Practices&lt;/h1&gt;See a list of Hints, Tricks and Best Practices in this &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.BestPractices&amp;referringTitle=Home"&gt;document&lt;/a&gt;.&lt;br /&gt;
&lt;h1&gt;Frequently Asked Questions&lt;/h1&gt;Q: &lt;b&gt;Is this thing production ready?&lt;/b&gt;&lt;br /&gt;A: &lt;b&gt;Yes&lt;/b&gt;, im using it now on a heavy traffic site and it works great.&lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Sure it is production ready?&lt;/b&gt;&lt;br /&gt;A: Well, do a load test and &lt;b&gt;give us feedback&lt;/b&gt;. If you find something wrong, let us know. And if you fix it, consider sharing the code.&lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Are you going to support AVRO?&lt;/b&gt;&lt;br /&gt;A: &lt;b&gt;Maybe&lt;/b&gt;. At this time, the evolution of aquiles is driven by our needs, and we won&amp;#39;t upgrade our cassandra servers until the TTL is on the trunk (or any other compelling feature or killing bug). &lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Hey, it is Achilles!&lt;/b&gt;&lt;br /&gt;A: Well, not for us spanish speaking people. To be fair, it should be &lt;b&gt;Ἀχιλλεύς&lt;/b&gt;&lt;br /&gt;
&lt;h1&gt;Success Stories&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.javageneration.com/?p=318" class="externalLink"&gt;Chirper&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: twitter clone WebApp with .NET front-end and Cassandra NoSql back-end (&lt;b&gt;thanks Chaker Nakhli&lt;/b&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cipl.codeplex.com/" class="externalLink"&gt;Common Information Platform&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: Common abstraction over various data stores. (&lt;b&gt;thanks PatrickThompson&lt;/b&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.despegar.com/" class="externalLink"&gt;Despegar.com&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: Online Travel Agency. (&lt;b&gt;thanks All in Despegar&lt;/b&gt;)&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Donations&lt;/h1&gt;As you know, this project is free and it is supported and developed during my free time. However, I accept donations to help support Aquiles and accelerate development on it. &lt;a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;amp;business=4N67395RL2R4A&amp;amp;lc=US&amp;amp;item_name=Aquiles&amp;amp;item_number=Aquiles&amp;amp;currency_code=USD" class="externalLink"&gt;Click here to donate to Aquiles&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>javiercanillas</author><pubDate>Mon, 22 Aug 2011 20:50:29 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20110822085029P</guid></item><item><title>Updated Wiki: Home</title><link>http://aquiles.codeplex.com/wikipage?version=54</link><description>&lt;div class="wikidoc"&gt;&lt;h2&gt;Check code, Huge refactor plus support for 0.8. Take in mind that is still on development! Any criticsm do it on Discussions please!&lt;/h2&gt;
&lt;h1&gt;Description&lt;/h1&gt;
Aquiles is a .NET (v3.5 or above) Client for &lt;a href="http://cassandra.apache.org/" class="externalLink"&gt;Apache Cassandra&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; version 0.6.X or above using &lt;a href="http://wiki.apache.org/cassandra/API" class="externalLink"&gt;Thrift API&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Basically, It adds:
&lt;ul&gt;&lt;li&gt;A &lt;b&gt;.NET friendly interface&lt;/b&gt; to cassandra operations. You operates against cassandra as you would operate against an SQL (See examples)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Connection Pool&lt;/b&gt; with warm-up and size control capabilities&lt;/li&gt;
&lt;li&gt;An &lt;b&gt;Endpoint Manager&lt;/b&gt; to manage all the entrypoint nodes to one cluster. It will automatically &lt;b&gt;distribute the connections against all the cluster endpoints&lt;/b&gt; defined, and will &lt;b&gt;check for healthiness&lt;/b&gt; of the nodes with a defensive node health check strategy.&lt;/li&gt;
&lt;li&gt;Command parameter Validation:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Input Parameter Completeness&lt;/b&gt; (no more going against a cluster to detect that you are missing a parameter!)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;Prior &lt;b&gt;Keyspace and ColumnFamily existance validation&lt;/b&gt; against a cluster information (retrieved on initialization)&lt;/del&gt; (taken out since version 0.7.X)&lt;/li&gt;
&lt;li&gt;a &lt;b&gt;simple and user-friendly configuration section&lt;/b&gt; to configure all your clusters&lt;/li&gt;
&lt;li&gt;You &lt;b&gt;can handle more than 1 cluster&lt;/b&gt; in your application &lt;/li&gt;
&lt;li&gt;You can configure what ConnectionPool you want to use and its internal parameters.&lt;/li&gt;
&lt;li&gt;You can choose what EndpointManager you want to use&lt;/li&gt;
&lt;li&gt;You can &lt;b&gt;choose what Transport do you want to use&lt;/b&gt;, and even when using TBufferedTransport you can set the length of the buffer!&lt;/li&gt;
&lt;li&gt;You can managed (add, modify, remove) your Keyspaces and ColumnFamilies using Aquiles (since version 0.7.X)&lt;/li&gt;
&lt;li&gt;Some &lt;b&gt;Byte Enconder Helpers to avoid the need to create and managed your own&lt;/b&gt; (Long, UTF8, ASCII, GUID, UUID and soon on).&lt;/li&gt;
&lt;li&gt;Fully support on GetIndexedSlices &lt;a href="http://aquiles.codeplex.com/releases/view/58742" class="externalLink"&gt;click here&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;*&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Monitor features out of the box, now you can monitor all your connections to Cassandra simply by using Performance Monitor (native with Windows)&lt;/b&gt; by implementing &lt;a href="http://perfmoncounterhelper.codeplex.com" class="externalLink"&gt;PerformanceCounterHelper fwk&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. Take the following screenshot as an example:&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=Aquiles&amp;DownloadId=226455" alt="Monitor.jpg" title="Monitor.jpg" /&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;Instructions on how to enable this feature are in &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Diagnostic.Extension&amp;referringTitle=Home"&gt;Aquiles.Diagnostic.Extension&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You can take a look at &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.VersionHistory&amp;referringTitle=Home"&gt;Version History&lt;/a&gt; for the lastest updates.
&lt;hr /&gt;

&lt;h1&gt;Commands Supported&lt;/h1&gt;
Aquiles supports all the Cassandra 0.7 commands. Below you will find the most commons (check code for the full list):&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.BatchMutateCommand&amp;referringTitle=Home"&gt;BatchMutateCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.DeleteCommand&amp;referringTitle=Home"&gt;DeleteCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.DescribeKeySpaceCommand&amp;referringTitle=Home"&gt;DescribeKeySpaceCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.DescribeSnitchCommand&amp;referringTitle=Home"&gt;DescribeSnitchCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.DescribeSplitsCommand&amp;referringTitle=Home"&gt;DescribeSplitsCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.GetCommand&amp;referringTitle=Home"&gt;GetCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.GetCountCommand&amp;referringTitle=Home"&gt;GetCountCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.GetIndexedSlicesCommand&amp;referringTitle=Home"&gt;GetIndexedSlicesCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.GetKeyRangeSliceCommand&amp;referringTitle=Home"&gt;GetKeyRangeSliceCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.GetSliceCommand&amp;referringTitle=Home"&gt;GetSliceCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.InsertCommand&amp;referringTitle=Home"&gt;InsertCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.LoginCommand&amp;referringTitle=Home"&gt;LoginCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.MultiGetCountCommand&amp;referringTitle=Home"&gt;MultiGetCountCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.MultiGetSliceCommand&amp;referringTitle=Home"&gt;MultiGetSliceCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.RetrieveClusterNameCommand&amp;referringTitle=Home"&gt;RetrieveClusterNameCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.RetrieveClusterVersionCommand&amp;referringTitle=Home"&gt;RetrieveClusterVersionCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.RetrieveKeySpaceDistributionCommand&amp;referringTitle=Home"&gt;RetrieveKeySpaceDistributionCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.RetrieveKeySpacesCommand&amp;referringTitle=Home"&gt;RetrieveKeySpacesCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.RetrievePartitionerCommand&amp;referringTitle=Home"&gt;RetrievePartitionerCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.TruncateColumnFamilyCommand&amp;referringTitle=Home"&gt;TruncateColumnFamilyCommand&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;System commands:
&lt;ul&gt;&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.AddColumnFamilyCommand&amp;referringTitle=Home"&gt;AddColumnFamilyCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.AddKeyspaceCommand&amp;referringTitle=Home"&gt;AddKeyspaceCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.DropColumnFamilyCommand&amp;referringTitle=Home"&gt;DropColumnFamilyCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.DropKeyspaceCommand&amp;referringTitle=Home"&gt;DropKeyspaceCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.SchemaAgreementCommand&amp;referringTitle=Home"&gt;SchemaAgreementCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.UpdateColumnFamilyCommand&amp;referringTitle=Home"&gt;UpdateColumnFamilyCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.UpdateKeyspaceCommand&amp;referringTitle=Home"&gt;UpdateKeyspaceCommand&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; Command help pages are under development. 
&lt;hr /&gt;

&lt;h1&gt;Easy Example of use&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Example 1&lt;/b&gt;:&lt;/li&gt;&lt;/ul&gt;
Suppose that you have a Cassandra instance configured in your App.Confg or Web.Config, and you named it &amp;quot;Cassandra1&amp;quot;. Suppose then, that there is a Keyspace called &amp;quot;TestKeyspace&amp;quot; and within that KeySpace there is a ColumnFamily called &amp;quot;TestColumnFamily&amp;quot;.&lt;br /&gt;Now, lets presume that you need to insert a new key &amp;quot;testKey&amp;quot; with a new Column called &amp;quot;testColumn&amp;quot; with a value of &amp;quot;testValue&amp;quot;. You may acomplish that with the following code.&lt;br /&gt;&lt;pre&gt;
string columnFamily = &amp;quot;TestColumnFamily&amp;quot;;
string keyspace = &amp;quot;TestKeyspace&amp;quot;;
string key = &amp;quot;testKey&amp;quot;;
string columnName = &amp;quot;testColumn&amp;quot;;
string columnValue = &amp;quot;testValue&amp;quot;;

// Insert statement
InsertCommand insertCommand = new InsertCommand();
insertCommand.ColumnFamily = columnFamily;
insertCommand.Key = key;
insertCommand.Column = new Aquiles.Model.AquilesColumn() 
    { 
        ColumnName = Aquiles.Helpers.Encoders.ByteEncoderHelper.UTF8Encoder.ToByteArray(columnName) , 
        Value = Aquiles.Helpers.Encoders.ByteEncoderHelper.UTF8Encoder.ToByteArray(columnValue) 
    };

    using (IAquilesConnection connection = AquilesHelper.RetrieveConnection(&amp;quot;Cassandra1&amp;quot;, keyspace))
    {
        connection.Execute(insertCommand);
    }
&lt;/pre&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Example 2&lt;/b&gt;:&lt;/li&gt;&lt;/ul&gt;
Now, Lets continue with the assumption of the Example1 and that you need to retrieve the value inserted. Your code would be similar to:&lt;br /&gt;&lt;pre&gt;
// Get statement
GetCommand getCommand = new GetCommand();
getCommand.Key = key;
getCommand.ColumnFamily = columnFamily;
getCommand.ColumnName = Aquiles.Helpers.Encoders.ByteEncoderHelper.UTF8Encoder.ToByteArray(columnName);

using (IAquilesConnection connection = AquilesHelper.RetrieveConnection(&amp;quot;Cassandra1&amp;quot;, keyspace))
{
    connection.Execute(getCommand);
}
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As you see, using this client is, somehow, like using a connection to a Database (Cassandra is not a database, but the syntax is similar). More examples can be found at each command.&lt;br /&gt;
&lt;h1&gt;Aquiles Configuration Section&lt;/h1&gt;Configuring Aquiles to use a Cassandra cluster is easy, add the following section into your App.Config (Web.config in case of ASPNET application):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;configuration&amp;gt;
  &amp;lt;configSections&amp;gt;
    &amp;lt;section name=&amp;quot;aquilesConfiguration&amp;quot; type=&amp;quot;Aquiles.Configuration.AquilesConfigurationSection,Aquiles&amp;quot;/&amp;gt;
  &amp;lt;/configSections&amp;gt;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; That the section name must be &amp;#39;&amp;#39;aquilesConfiguration&amp;#39;&amp;#39; and no other, or you Aquiles will not load and will throw a ConfigurationException when first time used.&lt;br /&gt;&lt;br /&gt;After that, you will only need to configure your cluster&amp;#39;s information like following:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
 &amp;lt;aquilesConfiguration&amp;gt;
    &amp;lt;clusters&amp;gt;
      &amp;lt;add friendlyName=&amp;quot;Keyspace1&amp;quot;&amp;gt;
        &amp;lt;connection poolType=&amp;quot;SIZECONTROLLEDPOOL&amp;quot; factoryType=&amp;quot;BUFFERED&amp;quot;&amp;gt;
        &amp;lt;/connection&amp;gt;
        &amp;lt;endpointManager type=&amp;quot;ROUNDROBIN&amp;quot; defaultTimeout=&amp;quot;6000&amp;quot;&amp;gt;
          &amp;lt;cassandraEndpoints&amp;gt;
            &amp;lt;add address=&amp;quot;localhost&amp;quot; port=&amp;quot;9160&amp;quot;/&amp;gt;
          &amp;lt;/cassandraEndpoints&amp;gt;
        &amp;lt;/endpointManager&amp;gt;
      &amp;lt;/add&amp;gt;
    &amp;lt;/clusters&amp;gt;
  &amp;lt;/aquilesConfiguration&amp;gt;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;For further Configuration options, please see &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Configuration&amp;referringTitle=Home"&gt;Configuring Aquiles&lt;/a&gt;
&lt;hr /&gt;

&lt;h1&gt;Hints, Tricks, Best Practices&lt;/h1&gt;See a list of Hints, Tricks and Best Practices in this &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.BestPractices&amp;referringTitle=Home"&gt;document&lt;/a&gt;.&lt;br /&gt;
&lt;h1&gt;Frequently Asked Questions&lt;/h1&gt;Q: &lt;b&gt;Is this thing production ready?&lt;/b&gt;&lt;br /&gt;A: &lt;b&gt;Yes&lt;/b&gt;, im using it now on a heavy traffic site and it works great.&lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Sure it is production ready?&lt;/b&gt;&lt;br /&gt;A: Well, do a load test and &lt;b&gt;give us feedback&lt;/b&gt;. If you find something wrong, let us know. And if you fix it, consider sharing the code.&lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Are you going to support AVRO?&lt;/b&gt;&lt;br /&gt;A: &lt;b&gt;Maybe&lt;/b&gt;. At this time, the evolution of aquiles is driven by our needs, and we won&amp;#39;t upgrade our cassandra servers until the TTL is on the trunk (or any other compelling feature or killing bug). &lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Hey, it is Achilles!&lt;/b&gt;&lt;br /&gt;A: Well, not for us spanish speaking people. To be fair, it should be &lt;b&gt;Ἀχιλλεύς&lt;/b&gt;&lt;br /&gt;
&lt;h1&gt;Success Stories&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.javageneration.com/?p=318" class="externalLink"&gt;Chirper&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: twitter clone WebApp with .NET front-end and Cassandra NoSql back-end (&lt;b&gt;thanks Chaker Nakhli&lt;/b&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cipl.codeplex.com/" class="externalLink"&gt;Common Information Platform&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: Common abstraction over various data stores. (&lt;b&gt;thanks PatrickThompson&lt;/b&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.despegar.com/" class="externalLink"&gt;Despegar.com&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: Online Travel Agency. (&lt;b&gt;thanks All in Despegar&lt;/b&gt;)&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Donations&lt;/h1&gt;As you know, this project is free and it is supported and developed during my free time. However, I accept donations to help support Aquiles and accelerate development on it. &lt;a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;amp;business=4N67395RL2R4A&amp;amp;lc=US&amp;amp;item_name=Aquiles&amp;amp;item_number=Aquiles&amp;amp;currency_code=USD" class="externalLink"&gt;Click here to donate to Aquiles&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>javiercanillas</author><pubDate>Tue, 21 Jun 2011 00:46:37 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20110621124637A</guid></item><item><title>Updated Wiki: Home</title><link>http://aquiles.codeplex.com/wikipage?version=53</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Description&lt;/h1&gt;
Aquiles is a .NET (v3.5 or above) Client for &lt;a href="http://cassandra.apache.org/" class="externalLink"&gt;Apache Cassandra&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; version 0.6.X or above using &lt;a href="http://wiki.apache.org/cassandra/API" class="externalLink"&gt;Thrift API&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Basically, It adds:
&lt;ul&gt;&lt;li&gt;A &lt;b&gt;.NET friendly interface&lt;/b&gt; to cassandra operations. You operates against cassandra as you would operate against an SQL (See examples)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Connection Pool&lt;/b&gt; with warm-up and size control capabilities&lt;/li&gt;
&lt;li&gt;An &lt;b&gt;Endpoint Manager&lt;/b&gt; to manage all the entrypoint nodes to one cluster. It will automatically &lt;b&gt;distribute the connections against all the cluster endpoints&lt;/b&gt; defined, and will &lt;b&gt;check for healthiness&lt;/b&gt; of the nodes with a defensive node health check strategy.&lt;/li&gt;
&lt;li&gt;Command parameter Validation:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Input Parameter Completeness&lt;/b&gt; (no more going against a cluster to detect that you are missing a parameter!)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;Prior &lt;b&gt;Keyspace and ColumnFamily existance validation&lt;/b&gt; against a cluster information (retrieved on initialization)&lt;/del&gt; (taken out since version 0.7.X)&lt;/li&gt;
&lt;li&gt;a &lt;b&gt;simple and user-friendly configuration section&lt;/b&gt; to configure all your clusters&lt;/li&gt;
&lt;li&gt;You &lt;b&gt;can handle more than 1 cluster&lt;/b&gt; in your application &lt;/li&gt;
&lt;li&gt;You can configure what ConnectionPool you want to use and its internal parameters.&lt;/li&gt;
&lt;li&gt;You can choose what EndpointManager you want to use&lt;/li&gt;
&lt;li&gt;You can &lt;b&gt;choose what Transport do you want to use&lt;/b&gt;, and even when using TBufferedTransport you can set the length of the buffer!&lt;/li&gt;
&lt;li&gt;You can managed (add, modify, remove) your Keyspaces and ColumnFamilies using Aquiles (since version 0.7.X)&lt;/li&gt;
&lt;li&gt;Some &lt;b&gt;Byte Enconder Helpers to avoid the need to create and managed your own&lt;/b&gt; (Long, UTF8, ASCII, GUID, UUID and soon on).&lt;/li&gt;
&lt;li&gt;Fully support on GetIndexedSlices &lt;a href="http://aquiles.codeplex.com/releases/view/58742" class="externalLink"&gt;click here&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;*&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Monitor features out of the box, now you can monitor all your connections to Cassandra simply by using Performance Monitor (native with Windows)&lt;/b&gt; by implementing &lt;a href="http://perfmoncounterhelper.codeplex.com" class="externalLink"&gt;PerformanceCounterHelper fwk&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. Take the following screenshot as an example:&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=Aquiles&amp;DownloadId=226455" alt="Monitor.jpg" title="Monitor.jpg" /&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;Instructions on how to enable this feature are in &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Diagnostic.Extension&amp;referringTitle=Home"&gt;Aquiles.Diagnostic.Extension&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You can take a look at &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.VersionHistory&amp;referringTitle=Home"&gt;Version History&lt;/a&gt; for the lastest updates.
&lt;hr /&gt;

&lt;h1&gt;Commands Supported&lt;/h1&gt;
Aquiles supports all the Cassandra 0.7 commands. Below you will find the most commons (check code for the full list):&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.BatchMutateCommand&amp;referringTitle=Home"&gt;BatchMutateCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.DeleteCommand&amp;referringTitle=Home"&gt;DeleteCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.DescribeKeySpaceCommand&amp;referringTitle=Home"&gt;DescribeKeySpaceCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.DescribeSnitchCommand&amp;referringTitle=Home"&gt;DescribeSnitchCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.DescribeSplitsCommand&amp;referringTitle=Home"&gt;DescribeSplitsCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.GetCommand&amp;referringTitle=Home"&gt;GetCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.GetCountCommand&amp;referringTitle=Home"&gt;GetCountCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.GetIndexedSlicesCommand&amp;referringTitle=Home"&gt;GetIndexedSlicesCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.GetKeyRangeSliceCommand&amp;referringTitle=Home"&gt;GetKeyRangeSliceCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.GetSliceCommand&amp;referringTitle=Home"&gt;GetSliceCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.InsertCommand&amp;referringTitle=Home"&gt;InsertCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.LoginCommand&amp;referringTitle=Home"&gt;LoginCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.MultiGetCountCommand&amp;referringTitle=Home"&gt;MultiGetCountCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.MultiGetSliceCommand&amp;referringTitle=Home"&gt;MultiGetSliceCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.RetrieveClusterNameCommand&amp;referringTitle=Home"&gt;RetrieveClusterNameCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.RetrieveClusterVersionCommand&amp;referringTitle=Home"&gt;RetrieveClusterVersionCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.RetrieveKeySpaceDistributionCommand&amp;referringTitle=Home"&gt;RetrieveKeySpaceDistributionCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.RetrieveKeySpacesCommand&amp;referringTitle=Home"&gt;RetrieveKeySpacesCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.RetrievePartitionerCommand&amp;referringTitle=Home"&gt;RetrievePartitionerCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.TruncateColumnFamilyCommand&amp;referringTitle=Home"&gt;TruncateColumnFamilyCommand&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;System commands:
&lt;ul&gt;&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.AddColumnFamilyCommand&amp;referringTitle=Home"&gt;AddColumnFamilyCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.AddKeyspaceCommand&amp;referringTitle=Home"&gt;AddKeyspaceCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.DropColumnFamilyCommand&amp;referringTitle=Home"&gt;DropColumnFamilyCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.DropKeyspaceCommand&amp;referringTitle=Home"&gt;DropKeyspaceCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.SchemaAgreementCommand&amp;referringTitle=Home"&gt;SchemaAgreementCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.UpdateColumnFamilyCommand&amp;referringTitle=Home"&gt;UpdateColumnFamilyCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.UpdateKeyspaceCommand&amp;referringTitle=Home"&gt;UpdateKeyspaceCommand&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; Command help pages are under development. 
&lt;hr /&gt;

&lt;h1&gt;Easy Example of use&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Example 1&lt;/b&gt;:&lt;/li&gt;&lt;/ul&gt;
Suppose that you have a Cassandra instance configured in your App.Confg or Web.Config, and you named it &amp;quot;Cassandra1&amp;quot;. Suppose then, that there is a Keyspace called &amp;quot;TestKeyspace&amp;quot; and within that KeySpace there is a ColumnFamily called &amp;quot;TestColumnFamily&amp;quot;.&lt;br /&gt;Now, lets presume that you need to insert a new key &amp;quot;testKey&amp;quot; with a new Column called &amp;quot;testColumn&amp;quot; with a value of &amp;quot;testValue&amp;quot;. You may acomplish that with the following code.&lt;br /&gt;&lt;pre&gt;
string columnFamily = &amp;quot;TestColumnFamily&amp;quot;;
string keyspace = &amp;quot;TestKeyspace&amp;quot;;
string key = &amp;quot;testKey&amp;quot;;
string columnName = &amp;quot;testColumn&amp;quot;;
string columnValue = &amp;quot;testValue&amp;quot;;

// Insert statement
InsertCommand insertCommand = new InsertCommand();
insertCommand.ColumnFamily = columnFamily;
insertCommand.Key = key;
insertCommand.Column = new Aquiles.Model.AquilesColumn() 
    { 
        ColumnName = Aquiles.Helpers.Encoders.ByteEncoderHelper.UTF8Encoder.ToByteArray(columnName) , 
        Value = Aquiles.Helpers.Encoders.ByteEncoderHelper.UTF8Encoder.ToByteArray(columnValue) 
    };

    using (IAquilesConnection connection = AquilesHelper.RetrieveConnection(&amp;quot;Cassandra1&amp;quot;, keyspace))
    {
        connection.Execute(insertCommand);
    }
&lt;/pre&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Example 2&lt;/b&gt;:&lt;/li&gt;&lt;/ul&gt;
Now, Lets continue with the assumption of the Example1 and that you need to retrieve the value inserted. Your code would be similar to:&lt;br /&gt;&lt;pre&gt;
// Get statement
GetCommand getCommand = new GetCommand();
getCommand.Key = key;
getCommand.ColumnFamily = columnFamily;
getCommand.ColumnName = Aquiles.Helpers.Encoders.ByteEncoderHelper.UTF8Encoder.ToByteArray(columnName);

using (IAquilesConnection connection = AquilesHelper.RetrieveConnection(&amp;quot;Cassandra1&amp;quot;, keyspace))
{
    connection.Execute(getCommand);
}
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As you see, using this client is, somehow, like using a connection to a Database (Cassandra is not a database, but the syntax is similar). More examples can be found at each command.&lt;br /&gt;
&lt;h1&gt;Aquiles Configuration Section&lt;/h1&gt;Configuring Aquiles to use a Cassandra cluster is easy, add the following section into your App.Config (Web.config in case of ASPNET application):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;configuration&amp;gt;
  &amp;lt;configSections&amp;gt;
    &amp;lt;section name=&amp;quot;aquilesConfiguration&amp;quot; type=&amp;quot;Aquiles.Configuration.AquilesConfigurationSection,Aquiles&amp;quot;/&amp;gt;
  &amp;lt;/configSections&amp;gt;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; That the section name must be &amp;#39;&amp;#39;aquilesConfiguration&amp;#39;&amp;#39; and no other, or you Aquiles will not load and will throw a ConfigurationException when first time used.&lt;br /&gt;&lt;br /&gt;After that, you will only need to configure your cluster&amp;#39;s information like following:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
 &amp;lt;aquilesConfiguration&amp;gt;
    &amp;lt;clusters&amp;gt;
      &amp;lt;add friendlyName=&amp;quot;Keyspace1&amp;quot;&amp;gt;
        &amp;lt;connection poolType=&amp;quot;SIZECONTROLLEDPOOL&amp;quot; factoryType=&amp;quot;BUFFERED&amp;quot;&amp;gt;
        &amp;lt;/connection&amp;gt;
        &amp;lt;endpointManager type=&amp;quot;ROUNDROBIN&amp;quot; defaultTimeout=&amp;quot;6000&amp;quot;&amp;gt;
          &amp;lt;cassandraEndpoints&amp;gt;
            &amp;lt;add address=&amp;quot;localhost&amp;quot; port=&amp;quot;9160&amp;quot;/&amp;gt;
          &amp;lt;/cassandraEndpoints&amp;gt;
        &amp;lt;/endpointManager&amp;gt;
      &amp;lt;/add&amp;gt;
    &amp;lt;/clusters&amp;gt;
  &amp;lt;/aquilesConfiguration&amp;gt;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;For further Configuration options, please see &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Configuration&amp;referringTitle=Home"&gt;Configuring Aquiles&lt;/a&gt;
&lt;hr /&gt;

&lt;h1&gt;Hints, Tricks, Best Practices&lt;/h1&gt;See a list of Hints, Tricks and Best Practices in this &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.BestPractices&amp;referringTitle=Home"&gt;document&lt;/a&gt;.&lt;br /&gt;
&lt;h1&gt;Frequently Asked Questions&lt;/h1&gt;Q: &lt;b&gt;Is this thing production ready?&lt;/b&gt;&lt;br /&gt;A: &lt;b&gt;Yes&lt;/b&gt;, im using it now on a heavy traffic site and it works great.&lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Sure it is production ready?&lt;/b&gt;&lt;br /&gt;A: Well, do a load test and &lt;b&gt;give us feedback&lt;/b&gt;. If you find something wrong, let us know. And if you fix it, consider sharing the code.&lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Are you going to support AVRO?&lt;/b&gt;&lt;br /&gt;A: &lt;b&gt;Maybe&lt;/b&gt;. At this time, the evolution of aquiles is driven by our needs, and we won&amp;#39;t upgrade our cassandra servers until the TTL is on the trunk (or any other compelling feature or killing bug). &lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Hey, it is Achilles!&lt;/b&gt;&lt;br /&gt;A: Well, not for us spanish speaking people. To be fair, it should be &lt;b&gt;Ἀχιλλεύς&lt;/b&gt;&lt;br /&gt;
&lt;h1&gt;Success Stories&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.javageneration.com/?p=318" class="externalLink"&gt;Chirper&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: twitter clone WebApp with .NET front-end and Cassandra NoSql back-end (&lt;b&gt;thanks Chaker Nakhli&lt;/b&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cipl.codeplex.com/" class="externalLink"&gt;Common Information Platform&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: Common abstraction over various data stores. (&lt;b&gt;thanks PatrickThompson&lt;/b&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.despegar.com/" class="externalLink"&gt;Despegar.com&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: Online Travel Agency. (&lt;b&gt;thanks All in Despegar&lt;/b&gt;)&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Donations&lt;/h1&gt;As you know, this project is free and it is supported and developed during my free time. However, I accept donations to help support Aquiles and accelerate development on it. &lt;a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;amp;business=4N67395RL2R4A&amp;amp;lc=US&amp;amp;item_name=Aquiles&amp;amp;item_number=Aquiles&amp;amp;currency_code=USD" class="externalLink"&gt;Click here to donate to Aquiles&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>javiercanillas</author><pubDate>Thu, 05 May 2011 21:22:29 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20110505092229P</guid></item><item><title>Updated Wiki: Home</title><link>http://aquiles.codeplex.com/wikipage?version=52</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Description&lt;/h1&gt;
Aquiles is a .NET (v3.5 or above) Client for &lt;a href="http://cassandra.apache.org/" class="externalLink"&gt;Apache Cassandra&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; version 0.6.X or above using &lt;a href="http://wiki.apache.org/cassandra/API" class="externalLink"&gt;Thrift API&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Basically, It adds:
&lt;ul&gt;&lt;li&gt;A &lt;b&gt;.NET friendly interface&lt;/b&gt; to cassandra operations. You operates against cassandra as you would operate against an SQL (See examples)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Connection Pool&lt;/b&gt; with warm-up and size control capabilities&lt;/li&gt;
&lt;li&gt;An &lt;b&gt;Endpoint Manager&lt;/b&gt; to manage all the entrypoint nodes to one cluster. It will automatically &lt;b&gt;distribute the connections against all the cluster endpoints&lt;/b&gt; defined, and will &lt;b&gt;check for healthiness&lt;/b&gt; of the nodes with a defensive node health check strategy.&lt;/li&gt;
&lt;li&gt;Command parameter Validation:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Input Parameter Completeness&lt;/b&gt; (no more going against a cluster to detect that you are missing a parameter!)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;Prior &lt;b&gt;Keyspace and ColumnFamily existance validation&lt;/b&gt; against a cluster information (retrieved on initialization)&lt;/del&gt; (taken out since version 0.7.X)&lt;/li&gt;
&lt;li&gt;a &lt;b&gt;simple and user-friendly configuration section&lt;/b&gt; to configure all your clusters&lt;/li&gt;
&lt;li&gt;You &lt;b&gt;can handle more than 1 cluster&lt;/b&gt; in your application &lt;/li&gt;
&lt;li&gt;You can configure what ConnectionPool you want to use and its internal parameters.&lt;/li&gt;
&lt;li&gt;You can choose what EndpointManager you want to use&lt;/li&gt;
&lt;li&gt;You can &lt;b&gt;choose what Transport do you want to use&lt;/b&gt;, and even when using TBufferedTransport you can set the length of the buffer!&lt;/li&gt;
&lt;li&gt;You can managed (add, modify, remove) your Keyspaces and ColumnFamilies using Aquiles (since version 0.7.X)&lt;/li&gt;
&lt;li&gt;Some &lt;b&gt;Byte Enconder Helpers to avoid the need to create and managed your own&lt;/b&gt; (Long, UTF8, ASCII, GUID, UUID and soon on).&lt;/li&gt;
&lt;li&gt;Fully support on GetIndexedSlices &lt;a href="http://aquiles.codeplex.com/releases/view/58742" class="externalLink"&gt;click here&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;*&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Monitor features out of the box, now you can monitor all your connections to Cassandra simply by using Performance Monitor (native with Windows)&lt;/b&gt; by implementing &lt;a href="http://perfmoncounterhelper.codeplex.com" class="externalLink"&gt;PerformanceCounterHelper fwk&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. Take the following screenshot as an example:&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=Aquiles&amp;DownloadId=226455" alt="Monitor.jpg" title="Monitor.jpg" /&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;Instructions on how to enable this feature are in &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Diagnostic.Extension&amp;referringTitle=Home"&gt;Aquiles.Diagnostic.Extension&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You can take a look at &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.VersionHistory&amp;referringTitle=Home"&gt;Version History&lt;/a&gt; for the lastest updates.
&lt;hr /&gt;

&lt;h1&gt;Commands Supported&lt;/h1&gt;
Aquiles supports all the Cassandra 0.7 commands. Below you will find the most commons (check code for the full list):&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.BatchMutateCommand&amp;referringTitle=Home"&gt;BatchMutateCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.DeleteCommand&amp;referringTitle=Home"&gt;DeleteCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.DescribeKeySpaceCommand&amp;referringTitle=Home"&gt;DescribeKeySpaceCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.DescribeSnitchCommand&amp;referringTitle=Home"&gt;DescribeSnitchCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.DescribeSplitsCommand&amp;referringTitle=Home"&gt;DescribeSplitsCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.GetCommand&amp;referringTitle=Home"&gt;GetCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.GetCountCommand&amp;referringTitle=Home"&gt;GetCountCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.GetIndexedSlicesCommand&amp;referringTitle=Home"&gt;GetIndexedSlicesCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.GetKeyRangeSliceCommand&amp;referringTitle=Home"&gt;GetKeyRangeSliceCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.GetSliceCommand&amp;referringTitle=Home"&gt;GetSliceCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.InsertCommand&amp;referringTitle=Home"&gt;InsertCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.LoginCommand&amp;referringTitle=Home"&gt;LoginCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.MultiGetCountCommand&amp;referringTitle=Home"&gt;MultiGetCountCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.MultiGetSliceCommand&amp;referringTitle=Home"&gt;MultiGetSliceCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.RetrieveClusterNameCommand&amp;referringTitle=Home"&gt;RetrieveClusterNameCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.RetrieveClusterVersionCommand&amp;referringTitle=Home"&gt;RetrieveClusterVersionCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.RetrieveKeySpaceDistributionCommand&amp;referringTitle=Home"&gt;RetrieveKeySpaceDistributionCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.RetrieveKeySpacesCommand&amp;referringTitle=Home"&gt;RetrieveKeySpacesCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.RetrievePartitionerCommand&amp;referringTitle=Home"&gt;RetrievePartitionerCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.TruncateColumnFamilyCommand&amp;referringTitle=Home"&gt;TruncateColumnFamilyCommand&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;System commands:
&lt;ul&gt;&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.AddColumnFamilyCommand&amp;referringTitle=Home"&gt;AddColumnFamilyCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.AddKeyspaceCommand&amp;referringTitle=Home"&gt;AddKeyspaceCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.DropColumnFamilyCommand&amp;referringTitle=Home"&gt;DropColumnFamilyCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.DropKeyspaceCommand&amp;referringTitle=Home"&gt;DropKeyspaceCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.SchemaAgreementCommand&amp;referringTitle=Home"&gt;SchemaAgreementCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.UpdateColumnFamilyCommand&amp;referringTitle=Home"&gt;UpdateColumnFamilyCommand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Command.UpdateKeyspaceCommand&amp;referringTitle=Home"&gt;UpdateKeyspaceCommand&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; Command help pages are under development. 
&lt;hr /&gt;

&lt;h1&gt;Easy Example of use&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Example 1&lt;/b&gt;:&lt;/li&gt;&lt;/ul&gt;
Suppose that you have a Cassandra instance configured in your App.Confg or Web.Config, and you named it &amp;quot;Cassandra1&amp;quot;. Suppose then, that there is a Keyspace called &amp;quot;TestKeyspace&amp;quot; and within that KeySpace there is a ColumnFamily called &amp;quot;TestColumnFamily&amp;quot;.&lt;br /&gt;Now, lets presume that you need to insert a new key &amp;quot;testKey&amp;quot; with a new Column called &amp;quot;testColumn&amp;quot; with a value of &amp;quot;testValue&amp;quot;. You may acomplish that with the following code.&lt;br /&gt;&lt;pre&gt;
string columnFamily = &amp;quot;TestColumnFamily&amp;quot;;
string keyspace = &amp;quot;TestKeyspace&amp;quot;;
string key = &amp;quot;testKey&amp;quot;;
string columnName = &amp;quot;testColumn&amp;quot;;
string columnValue = &amp;quot;testValue&amp;quot;;

// Insert statement
InsertCommand insertCommand = new InsertCommand();
insertCommand.ColumnFamily = columnFamily;
insertCommand.Key = key;
insertCommand.Column = new Aquiles.Model.AquilesColumn() 
    { 
        ColumnName = Aquiles.Helpers.Encoders.ByteEncoderHelper.UTF8Encoder.ToByteArray(columnName) , 
        Value = Aquiles.Helpers.Encoders.ByteEncoderHelper.UTF8Encoder.ToByteArray(columnValue) 
    };

    using (IAquilesConnection connection = AquilesHelper.RetrieveConnection(&amp;quot;Cassandra1&amp;quot;, keyspace))
    {
        connection.Execute(insertCommand);
    }
&lt;/pre&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Example 2&lt;/b&gt;:&lt;/li&gt;&lt;/ul&gt;
Now, Lets continue with the assumption of the Example1 and that you need to retrieve the value inserted. Your code would be similar to:&lt;br /&gt;&lt;pre&gt;
// Get statement
GetCommand getCommand = new GetCommand();
getCommand.Key = key;
getCommand.ColumnFamily = columnFamily;
getCommand.ColumnName = Aquiles.Helpers.Encoders.ByteEncoderHelper.UTF8Encoder.ToByteArray(columnName);

using (IAquilesConnection connection = AquilesHelper.RetrieveConnection(&amp;quot;Cassandra1&amp;quot;, keyspace))
{
    connection.Execute(getCommand);
}
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As you see, using this client is, somehow, like using a connection to a Database (Cassandra is not a database, but the syntax is similar). More examples can be found at each command.&lt;br /&gt;
&lt;h1&gt;Aquiles Configuration Section&lt;/h1&gt;Configuring Aquiles to use a Cassandra cluster is easy, add the following section into your App.Config (Web.config in case of ASPNET application):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;configuration&amp;gt;
  &amp;lt;configSections&amp;gt;
    &amp;lt;section name=&amp;quot;aquilesConfiguration&amp;quot; type=&amp;quot;Aquiles.Configuration.AquilesConfigurationSection,Aquiles&amp;quot;/&amp;gt;
  &amp;lt;/configSections&amp;gt;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; That the section name must be &amp;#39;&amp;#39;aquilesConfiguration&amp;#39;&amp;#39; and no other, or you Aquiles will not load and will throw a ConfigurationException when first time used.&lt;br /&gt;&lt;br /&gt;After that, you will only need to configure your cluster&amp;#39;s information like following:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
 &amp;lt;aquilesConfiguration&amp;gt;
    &amp;lt;clusters&amp;gt;
      &amp;lt;add friendlyName=&amp;quot;Keyspace1&amp;quot;&amp;gt;
        &amp;lt;connection poolType=&amp;quot;SIZECONTROLLEDPOOL&amp;quot; factoryType=&amp;quot;BUFFERED&amp;quot;&amp;gt;
        &amp;lt;/connection&amp;gt;
        &amp;lt;endpointManager type=&amp;quot;ROUNDROBIN&amp;quot; defaultTimeout=&amp;quot;6000&amp;quot;&amp;gt;
          &amp;lt;cassandraEndpoints&amp;gt;
            &amp;lt;add address=&amp;quot;localhost&amp;quot; port=&amp;quot;9160&amp;quot;/&amp;gt;
          &amp;lt;/cassandraEndpoints&amp;gt;
        &amp;lt;/endpointManager&amp;gt;
      &amp;lt;/add&amp;gt;
    &amp;lt;/clusters&amp;gt;
  &amp;lt;/aquilesConfiguration&amp;gt;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;For further Configuration options, please see &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.Configuration&amp;referringTitle=Home"&gt;Configuring Aquiles&lt;/a&gt;
&lt;hr /&gt;

&lt;h1&gt;Hints, Tricks, Best Practices&lt;/h1&gt;See a list of Hints, Tricks and Best Practices in this &lt;a href="http://aquiles.codeplex.com/wikipage?title=Aquiles.BestPractices&amp;referringTitle=Home"&gt;document&lt;/a&gt;.&lt;br /&gt;
&lt;h1&gt;Frequently Asked Questions&lt;/h1&gt;Q: &lt;b&gt;Is this thing production ready?&lt;/b&gt;&lt;br /&gt;A: &lt;b&gt;Yes&lt;/b&gt;, im using it now on a heavy traffic site and it works great.&lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Sure it is production ready?&lt;/b&gt;&lt;br /&gt;A: Well, do a load test and &lt;b&gt;give us feedback&lt;/b&gt;. If you find something wrong, let us know. And if you fix it, consider sharing the code.&lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Are you going to support AVRO?&lt;/b&gt;&lt;br /&gt;A: &lt;b&gt;Maybe&lt;/b&gt;. At this time, the evolution of aquiles is driven by our needs, and we won&amp;#39;t upgrade our cassandra servers until the TTL is on the trunk (or any other compelling feature or killing bug). &lt;br /&gt;&lt;br /&gt;Q: &lt;b&gt;Hey, it is Achilles!&lt;/b&gt;&lt;br /&gt;A: Well, not for us spanish speaking people. To be fair, it should be &lt;b&gt;Ἀχιλλεύς&lt;/b&gt;&lt;br /&gt;
&lt;h1&gt;Success Stories&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.javageneration.com/?p=318" class="externalLink"&gt;Chirper&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: twitter clone WebApp with .NET front-end and Cassandra NoSql back-end (&lt;b&gt;thanks Chaker Nakhli&lt;/b&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cipl.codeplex.com/" class="externalLink"&gt;Common Information Platform&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: Common abstraction over various data stores. (&lt;b&gt;thanks PatrickThompson&lt;/b&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.despegar.com/" class="externalLink"&gt;Despegar.com&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;: Online Travel Agency. (&lt;b&gt;thanks All&lt;/b&gt;)&lt;/li&gt;&lt;/ul&gt;
&lt;h1&gt;Donations&lt;/h1&gt;As you know, this project is free and it is supported and developed during my free time. However, I accept donations to help support Aquiles and accelerate development on it. &lt;a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;amp;business=4N67395RL2R4A&amp;amp;lc=US&amp;amp;item_name=Aquiles&amp;amp;item_number=Aquiles&amp;amp;currency_code=USD" class="externalLink"&gt;Click here to donate to Aquiles&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>javiercanillas</author><pubDate>Thu, 05 May 2011 13:46:26 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20110505014626P</guid></item></channel></rss>