<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="bbPress/1.0.3" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>DataStax Support Forums &#187; Topic: Read Performance Problem</title>
		<link>http://www.datastax.com/support-forums/topic/read-performance-problem</link>
		<description>Software, Support, and Training for Apache Cassandra</description>
		<language>en-US</language>
		<pubDate>Sat, 25 May 2013 08:53:01 +0000</pubDate>
		<generator>http://bbpress.org/?v=1.0.3</generator>
		<textInput>
			<title><![CDATA[Search]]></title>
			<description><![CDATA[Search all topics from these forums.]]></description>
			<name>q</name>
			<link>http://www.datastax.com/support-forums/search.php</link>
		</textInput>
		<atom:link href="http://www.datastax.com/support-forums/rss/topic/read-performance-problem" rel="self" type="application/rss+xml" />

		<item>
			<title>Anonymous on "Read Performance Problem"</title>
			<link>http://www.datastax.com/support-forums/topic/read-performance-problem#post-1061</link>
			<pubDate>Tue, 24 Jan 2012 20:22:00 +0000</pubDate>
			<dc:creator>Anonymous</dc:creator>
			<guid isPermaLink="false">1061@http://www.datastax.com/support-forums/</guid>
			<description>&#60;p&#62;Hi all,&#60;/p&#62;
&#60;p&#62;i have some performance problems with cassandra 1.0.1 - i am using aquiles .net client. I created a cluster of 15 nodes and did insert about 30gigs of data into it. The insert performance was good.&#60;/p&#62;
&#60;p&#62;But then i tried to read the data with multiget_slice. My setup was about 300-500 keys to perform a multiget_slice request. First problem i got there were exceptions on heap size and out of memory and also very bad response times... so i split up my request per 50 keys on each request and looped through the results - in a single thread. It takes about 17 seconds (no matter what read consistency) to load the data from 15 machines, for about 300 keys on avarage. and the data is not large, it's just text in small kB. I think i am doing something wrong here. Maybe on the configuration part or on the coding part... if anyone has a clue or ideas to help, please do so :)&#60;/p&#62;
&#60;p&#62;here is the problematic code:&#60;/p&#62;
&#60;p&#62;var cParent = new ColumnParent()&#60;br /&#62;
            {&#60;br /&#62;
                Column_family = ColumnFamilyNames.Term.ToString()&#60;br /&#62;
            };&#60;/p&#62;
&#60;p&#62;            var sPredict = new SlicePredicate()&#60;br /&#62;
            {&#60;br /&#62;
                Slice_range = new SliceRange() { Count = int.MaxValue, Reversed = false, Finish = new byte[] { }, Start = new byte[] { } }&#60;br /&#62;
            };&#60;/p&#62;
&#60;p&#62;            var cluster = AquilesHelper.RetrieveCluster(ClusterName);&#60;/p&#62;
&#60;p&#62;            //test&#60;br /&#62;
            var tempResult = new Dictionary&#38;lt;byte[], List&#38;lt;ColumnOrSuperColumn&#38;gt;&#38;gt;();&#60;/p&#62;
&#60;p&#62;            //Take per 50 cf from cluster.&#60;br /&#62;
            for (int i = 0;  ;i+=50)&#60;br /&#62;
            {&#60;br /&#62;
                int rcount = 49;&#60;/p&#62;
&#60;p&#62;                if (i &#38;gt;= keys.Count)&#60;br /&#62;
                    break;&#60;/p&#62;
&#60;p&#62;                if (i + rcount &#38;gt; keys.Count)&#60;br /&#62;
                    rcount = rcount - ((i + rcount) - keys.Count);&#60;/p&#62;
&#60;p&#62;                List&#38;lt;byte[]&#38;gt; temp = keys.GetRange(i, rcount);&#60;/p&#62;
&#60;p&#62;                var result =&#60;br /&#62;
                    (Dictionary&#38;lt;byte[], List&#38;lt;ColumnOrSuperColumn&#38;gt;&#38;gt;)&#60;br /&#62;
                    cluster.Execute(&#60;br /&#62;
                        new ExecutionBlock(&#60;br /&#62;
                            client =&#38;gt; client.multiget_slice(temp, cParent, sPredict, ReadConsistencyLevel)),&#60;br /&#62;
                        KeyspaceName);&#60;/p&#62;
&#60;p&#62;                tempResult = tempResult.Concat(result).ToDictionary(t =&#38;gt; t.Key, t =&#38;gt; t.Value);&#60;br /&#62;
            }&#60;br /&#62;
and my cassandra.aml:&#60;/p&#62;
&#60;p&#62;cluster_name: 'name'&#60;br /&#62;
initial_token:&#60;br /&#62;
hinted_handoff_enabled: true&#60;br /&#62;
max_hint_window_in_ms: 3600000 # one hour&#60;br /&#62;
hinted_handoff_throttle_delay_in_ms: 50&#60;br /&#62;
authenticator: org.apache.cassandra.auth.AllowAllAuthenticator&#60;br /&#62;
authority: org.apache.cassandra.auth.AllowAllAuthority&#60;br /&#62;
partitioner: org.apache.cassandra.dht.RandomPartitioner&#60;br /&#62;
data_file_directories:&#60;br /&#62;
	- /data/data&#60;br /&#62;
commitlog_directory: /data/commitlog&#60;br /&#62;
saved_caches_directory: /data/saved_caches&#60;br /&#62;
commitlog_sync: periodic&#60;br /&#62;
commitlog_sync_period_in_ms: 10000&#60;br /&#62;
seed_provider:&#60;br /&#62;
	- class_name: org.apache.cassandra.locator.SimpleSeedProvider&#60;br /&#62;
  	parameters:&#60;br /&#62;
      	- seeds: &#34;164.8.7.53, 164.8.7.61, 164.8.7.63&#34;&#60;br /&#62;
flush_largest_memtables_at: 0.75&#60;br /&#62;
reduce_cache_sizes_at: 0.85&#60;br /&#62;
reduce_cache_capacity_to: 0.6&#60;br /&#62;
concurrent_reads: 32&#60;br /&#62;
concurrent_writes: 32&#60;br /&#62;
memtable_flush_queue_size: 4&#60;br /&#62;
sliced_buffer_size_in_kb: 64&#60;br /&#62;
storage_port: 7000&#60;br /&#62;
ssl_storage_port: 7001&#60;br /&#62;
listen_address: 164.8.7.63&#60;br /&#62;
rpc_address: 164.8.7.63&#60;br /&#62;
rpc_port: 9160&#60;br /&#62;
rpc_keepalive: true&#60;br /&#62;
rpc_server_type: sync&#60;br /&#62;
thrift_framed_transport_size_in_mb: 15&#60;br /&#62;
thrift_max_message_length_in_mb: 16&#60;br /&#62;
incremental_backups: false&#60;br /&#62;
snapshot_before_compaction: false&#60;br /&#62;
column_index_size_in_kb: 64&#60;br /&#62;
in_memory_compaction_limit_in_mb: 64&#60;br /&#62;
multithreaded_compaction: false&#60;br /&#62;
compaction_throughput_mb_per_sec: 16&#60;br /&#62;
compaction_preheat_key_cache: true&#60;br /&#62;
rpc_timeout_in_ms: 10000&#60;br /&#62;
endpoint_snitch: org.apache.cassandra.locator.SimpleSnitch&#60;br /&#62;
dynamic_snitch_badness_threshold: 0.1&#60;br /&#62;
request_scheduler: org.apache.cassandra.scheduler.NoScheduler&#60;br /&#62;
index_interval: 128&#60;br /&#62;
encryption_options:&#60;br /&#62;
	internode_encryption: none&#60;br /&#62;
	keystore: conf/.keystore&#60;br /&#62;
	keystore_password: cassandra&#60;br /&#62;
	truststore: conf/.truststore&#60;br /&#62;
	truststore_password: cassandra&#60;/p&#62;
&#60;p&#62;thanks and br
&#60;/p&#62;</description>
		</item>

	</channel>
</rss>
