コード例 #1
0
ファイル: helpers.py プロジェクト: Zemanta/sheepy
    def test_hash_shard(self):
        num_shards = 128

        self.assertEqual(len(set(_get_hash_shard("aaa", num_shards) for _ in xrange(100))), 1)

        sh_max = max(_get_hash_shard(str(x), num_shards) for x in xrange(10000))
        sh_min = min(_get_hash_shard(str(x), num_shards) for x in xrange(10000))
        self.assertEqual(sh_max, num_shards - 1)
        self.assertEqual(sh_min, 0)
コード例 #2
0
ファイル: rollup.py プロジェクト: Zemanta/sheepy
	def _save_metric_rollup(self, metric_id, ts, values, is_hot):
		values_sum = defaultdict(int)
		for v in  values:
			values_sum[v.metric_key] += v.value

		query = []
		query.append('BEGIN BATCH')
		for metric_key, v in values_sum.iteritems():
			params = [metric_id, ts, _get_hash_shard(metric_key, self._CounterBase.num_shards), metric_key, v]
			query.append(bind_params(self._write_stmt_str, params))
		query.append('APPLY BATCH')

		query_string = '\n'.join(query)

		statement = SimpleStatement(query_string, consistency_level=self._write_consistency_level)
		self._CounterBase.session.execute(statement)

		self._save_to_journal(metric_id, ts, is_hot)
コード例 #3
0
ファイル: models.py プロジェクト: Zemanta/sheepy
	def _get_add_query_values(cls, key, value):
		encoded_key = cls._protocol.encode(key)
		return [cls.get_metric_id(), _get_ts_rotation(cls.metrics_rotation),
				_get_hash_shard(encoded_key, cls.num_shards), encoded_key, value]