Return-Path: Delivered-To: apmail-cassandra-user-archive@www.apache.org Received: (qmail 90895 invoked from network); 27 Jul 2010 10:31:47 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 27 Jul 2010 10:31:47 -0000 Received: (qmail 71568 invoked by uid 500); 27 Jul 2010 10:31:45 -0000 Delivered-To: apmail-cassandra-user-archive@cassandra.apache.org Received: (qmail 71395 invoked by uid 500); 27 Jul 2010 10:31:41 -0000 Mailing-List: contact user-help@cassandra.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: user@cassandra.apache.org Delivered-To: mailing list user@cassandra.apache.org Received: (qmail 71380 invoked by uid 99); 27 Jul 2010 10:31:40 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 27 Jul 2010 10:31:40 +0000 X-ASF-Spam-Status: No, hits=-0.0 required=10.0 tests=RCVD_IN_DNSWL_NONE,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: local policy) Received: from [208.113.200.5] (HELO homiemail-a53.g.dreamhost.com) (208.113.200.5) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 27 Jul 2010 10:31:33 +0000 Received: from homiemail-a53.g.dreamhost.com (localhost [127.0.0.1]) by homiemail-a53.g.dreamhost.com (Postfix) with ESMTP id 5A90D138069 for ; Tue, 27 Jul 2010 03:31:10 -0700 (PDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=thelastpickle.com; h=content-type :mime-version:subject:from:in-reply-to:date :content-transfer-encoding:message-id:references:to; q=dns; s= thelastpickle.com; b=ByYXvcHEDsTbSJmzfxGQqrGOKxGBKYLO8uf6M3yXq+j WMSNR8DChY5BSOzMaPTE0a5yWRodltHGJwTUGlpY+5ybv0SP1hBtcpFWECEWMk4g zr/r6RaSwVVmFUJRSkWd7tfcdTjfjO/DImSbw5OB0MTdnawm8Dh3kU6UJxqJAu3g = DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=thelastpickle.com; h= content-type:mime-version:subject:from:in-reply-to:date :content-transfer-encoding:message-id:references:to; s= thelastpickle.com; bh=zi4w7CHaZjnNIEKrJDf0EgaJxSY=; b=3JkvGy2XrZ XfLX6FKNLQ0bNXYlRvvugtAF3HQt7iMuFV9YFfJVPKFBr70alZ6bu2HbnZ3ecO7x XgTplU0Nj72srcGXAVEJxPGhR+sRZ9jyfjXsnVaqvTAw+GmYVX5ikPA5gjyG7D5Q lBbA58XJyZlGmIGq1ASvI+H6VbdNdPnGc= Received: from [10.0.1.153] (121-73-157-230.cable.telstraclear.net [121.73.157.230]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) (Authenticated sender: aaron@thelastpickle.com) by homiemail-a53.g.dreamhost.com (Postfix) with ESMTPSA id BEF2B138062 for ; Tue, 27 Jul 2010 03:31:09 -0700 (PDT) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Apple Message framework v1081) Subject: Re: Cassandra to store 1 billion small 64KB Blobs From: aaron morton In-Reply-To: Date: Tue, 27 Jul 2010 22:31:05 +1200 Content-Transfer-Encoding: quoted-printable Message-Id: References: <79329e37-3f1e-4946-a807-81cdd86655f2@me.com> <795F2400-AB33-403A-A43B-D62DBEE59AB3@thelastpickle.com> To: user@cassandra.apache.org X-Mailer: Apple Mail (2.1081) X-Virus-Checked: Checked by ClamAV on apache.org > Some possibilities open up when using OPP, especially with aggregate > keys. This is more of an option when RF=3D=3Dcluster size, but not > necessarily a good reason to make RF=3Dcluster size if you haven't > already. This use of the OOP sounds like the way Lucandra stores data, they=20 want to have range scans and some random key distribution.=20 http://github.com/tjake/Lucandra See the hash_key() function in CassandraUtils.java for how they manually = hash=20 the key before storing it in cassandra.=20 > 64MB per row, 1MB columns > customerABC:file123:00000000 (colnames: 00000000, 00100000, 00200000, = ...) > customerABC:file123:04000000 (colnames: 04000000, 04100000, ... ) > if 0xFFFFFFFF is not enough for the file size (4,294,967,295), then > you can start with 10 or 12 digits instead (up to 2.8e+14) Grouping together chunks into larger groups/extents is an interesting = idea.=20 You could have a 'read ahead' buffer. I'm=20 sure somewhere in all these designs there is a magical balance between = row size and=20 the number of rows. They were saying chunks with the same has should = only=20 be stored once though, so not sure if it's applicable in this case.=20 > If you needed to add metadata to chunk groups/chunks, you can use > column names which are disjoint from '0'-'F', as long as your API > knows how to set your predicates up likewise. If there is at least one > column name which is dependable in each chunk row, then you can use it > as your predicate for "what's out there" queries. This avoids loading > column data for the chunks when looking up names (row/file/... names). > On the other hand, if you use an empty predicate, there is not an easy > way to avoid tombstone rows unless you make another trip to Cassandra > to verify. I've experimented with name spacing columns before, and found easier to=20= use a super CF in the long run. Cheers Aaron =20