Return-Path: X-Original-To: apmail-incubator-accumulo-user-archive@minotaur.apache.org Delivered-To: apmail-incubator-accumulo-user-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 30F529BD5 for ; Wed, 21 Mar 2012 18:48:11 +0000 (UTC) Received: (qmail 37843 invoked by uid 500); 21 Mar 2012 18:48:11 -0000 Delivered-To: apmail-incubator-accumulo-user-archive@incubator.apache.org Received: (qmail 37818 invoked by uid 500); 21 Mar 2012 18:48:11 -0000 Mailing-List: contact accumulo-user-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: accumulo-user@incubator.apache.org Delivered-To: mailing list accumulo-user@incubator.apache.org Received: (qmail 37810 invoked by uid 99); 21 Mar 2012 18:48:11 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 21 Mar 2012 18:48:11 +0000 X-ASF-Spam-Status: No, hits=1.5 required=5.0 tests=HTML_MESSAGE,RCVD_IN_DNSWL_LOW,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of eric.newton@gmail.com designates 209.85.210.175 as permitted sender) Received: from [209.85.210.175] (HELO mail-iy0-f175.google.com) (209.85.210.175) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 21 Mar 2012 18:48:03 +0000 Received: by iaag37 with SMTP id g37so1984151iaa.6 for ; Wed, 21 Mar 2012 11:47:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; bh=WmGE4VRpQ53o75GjaUFMPv95AVfR+lpLR05iU5uvZJ4=; b=HSfJQYX1StlWY/QRHfEnpMPh8M9jvJQS9jP9VMR9Kaupt79lBi49a9mfVOnLCT96hR uqnS9vk+9YdHCimRjkeS+S7d0OIC+NSoz3tGtV3VIa8/BDKcSAakr4M5//X2tpSYddC9 n5rj7K25e9FCUCNdytmXPakS86EWgyMxTHjXERL1P+CoJBGy6art9DftohntV1MDqST1 HJX2FX2G6GVoVxruhxrH/0pp8Zd/cAL5WnM3e06aPjsq/Bd3eulDYT0QwWBmToBesvmj N4x5bD9BlTPjPA2DBHW3qc33A6IFaQZmCiqJyv4ClBiORDtj/a0vTwan2zhTgDrTm4GG 0PuQ== MIME-Version: 1.0 Received: by 10.50.183.137 with SMTP id em9mr14355658igc.58.1332355662505; Wed, 21 Mar 2012 11:47:42 -0700 (PDT) Received: by 10.50.181.202 with HTTP; Wed, 21 Mar 2012 11:47:41 -0700 (PDT) In-Reply-To: <57754A39E408FB4994D100B1F4409AD80BD3D0D5@HDXDSP33.us.lmco.com> References: <57754A39E408FB4994D100B1F4409AD80BD3CF7B@HDXDSP33.us.lmco.com> <57754A39E408FB4994D100B1F4409AD80BD3D0D5@HDXDSP33.us.lmco.com> Date: Wed, 21 Mar 2012 14:47:41 -0400 Message-ID: Subject: Re: EXTERNAL: Re: Table design From: Eric Newton To: accumulo-user@incubator.apache.org Content-Type: multipart/related; boundary=14dae93408f7fa650f04bbc5399d X-Virus-Checked: Checked by ClamAV on apache.org --14dae93408f7fa650f04bbc5399d Content-Type: multipart/alternative; boundary=14dae93408f7fa650c04bbc5399c --14dae93408f7fa650c04bbc5399c Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable Yes, that is exactly what I'm trying to say. On Wed, Mar 21, 2012 at 2:35 PM, Cardon, Tejay E w= rote: > Thanks Eric. Just to make sure I understood correctly:**** > > If I have many (say 5+) locality groups, that would be bad for > performance, but if I have 2 locality groups with 10+ column families eac= h, > that would not be a major issue?**** > > ** ** > > Thanks,**** > > Tejay**** > > ** ** > > *From:* Eric Newton [mailto:eric.newton@gmail.com] > *Sent:* Wednesday, March 21, 2012 12:16 PM > *To:* accumulo-user@incubator.apache.org > *Subject:* EXTERNAL: Re: Table design**** > > ** ** > > In accumulo, there are no limits on the number/size of column families. > However, if you do want to group them into separate locality groups, you > need to list the column families for the group. This has to be storable = in > zookeeper, so groups should be limited to "dozens" of column families. > Reading from different groups at the same time will use more resources, > so, like HBase, you should limit the number of groups you have.**** > > ** ** > > The RFile format takes advantage of the similarity of data between keys, > and does not repeat elements of the key that are identical from key to ke= y. > If everything has the same visibility, it will only be listed once.**** > > ** ** > > And, when I say there is "no limit"... there is no predefined limit, but > rows, cf, cq, visibilities and values all need to comfortably fit in the > physical RAM available, perhaps multiple times, as they are serialized an= d > deserialized in the various services. **** > > ** ** > > As for table design... it depends a great deal on what you want to do.***= * > > ** ** > > Here is a short description of a complex indexing scheme that makes it > efficient to do distributed conjunctive queries on documents: **** > > ** ** > > http://incubator.apache.org/accumulo/example/wikisearch.html**** > > ** ** > > It makes it possible to do fast searches for queries like `TITLE matches > "f.*bar" and contains the words "catch" and "22" '.**** > > ** ** > > -Eric**** > > ** ** > > ** ** > > On Wed, Mar 21, 2012 at 12:43 PM, Cardon, Tejay E > wrote:**** > > Thank you ahead of time for the input.**** > > **** > > When designing tables in HBase, one is encouraged to use single letter > names for column families, and to only have 2 or 3 families. The > documentation states that this has to do with the underlying way that the > data is stored on disk. I=92m curious if similar considerations need to = be > made with Accumulo. **** > > **** > > Furthermore, and more specific to Accumulo, what considerations should be > made for visibility labels? If the visibility string for each cell is > stored on disk along with the data in the cell, I could see where both lo= ng > roll names and large combinations of rolls could have a major impact on > disk utilization.**** > > **** > > Finally, can anyone recommend a good resource for Accumulo table design > (or for key/value store design in general)?**** > > **** > > Thanks**** > > Tejay Cardon**** > > **** > > [image: cid:image001.jpg@01CC3D77.64A0E3D0]**** > > **** > > **** > > **** > > **** > > ** ** > --14dae93408f7fa650c04bbc5399c Content-Type: text/html; charset=windows-1252 Content-Transfer-Encoding: quoted-printable Yes, that is exactly what I'm trying to say.

On Wed, Mar 21, 2012 at 2:35 PM, Cardon, Tejay E = <tejay.e.cardon@lmco.com&= gt; wrote:

Thanks Eric.=A0 Just to m= ake sure I understood correctly:

If I have many (say 5+) l= ocality groups, that would be bad for performance, but if I have 2 locality= groups with 10+ column families each, that would not be a major issue?

=A0<= /p>

Thanks,

Tejay

=A0<= /p>

From: Eric New= ton [mailto:eric= .newton@gmail.com]
Sent: Wednesday, March 21, 2012 12:16 PM
To: accumulo-user@incubator.apache.org
Subject: EXTERNAL: Re: Table design

=A0

In accumulo, there are no limits on the number/size = of column families. =A0However, if you do want to group them into separate = locality groups, you need to list the column families for the group. =A0Thi= s has to be storable in zookeeper, so groups should be limited to "dozens" of column families. =A0Read= ing from different groups at the same time will use more resources, so, lik= e HBase, you should limit the number of groups you have.

=A0

The RFile format takes advantage of the similarity o= f data between keys, and does not repeat elements of the key that are ident= ical from key to key. =A0If everything has the same visibility, it will onl= y be listed once.

=A0

And, when I say there is "no limit"... the= re is no predefined limit, but rows, cf, cq, visibilities and values all ne= ed to comfortably fit in the physical RAM available, perhaps multiple times= , as they are serialized and deserialized in the various services. =A0

=A0

As for table design... it depends a great deal on wh= at you want to do.

=A0

Here is a short description of a complex indexing sc= heme that makes it efficient to do distributed=A0conjunctive=A0queries on d= ocuments:=A0

=A0

=A0

It makes it possible to do fast searches for queries= like `TITLE matches "f.*bar" and contains the words "catch&= quot; and "22" '.

=A0

-Eric

=A0

=A0

On Wed, Mar 21, 2012 at 12:43 PM, Cardon, Tejay E &l= t;tejay.e.card= on@lmco.com> wrote:

Thank you ahead of time for the input.

=A0

When designing tables in HBase, one is encouraged to= use single letter names for column families, and to only have 2 or 3 famil= ies.=A0 The documentation states that this has to do with the underlying way that the data is stored on disk.=A0 I=92m curious = if similar considerations need to be made with Accumulo.

=A0

Furthermore, and more specific to Accumulo, what con= siderations should be made for visibility labels?=A0 If the visibility stri= ng for each cell is stored on disk along with the data in the cell, I could see where both long roll names and large combinations= of rolls could have a major impact on disk utilization.

=A0

Finally, can anyone recommend a good resource for Ac= cumulo table design (or for key/value store design in general)?

=A0

Thanks

Tejay Cardon

=A0

3D"cid:image001.jpg@01CC3D77.64=

=A0

=A0

=A0

=A0

=A0


--14dae93408f7fa650c04bbc5399c-- --14dae93408f7fa650f04bbc5399d Content-Type: image/jpeg; name="image001.jpg" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: b8ce177b4442b128_0.1 /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcU FhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgo KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCACWAPoDASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD6N0XS tOk0aweSwtHdreNmZoVJJKjknFXf7H0z/oHWX/fhf8KNB/5Aenf9e0f/AKCK+ffFXiHWoPFOsRRa zqUcSXkyoiXThVUOcAAHgUkrgfQX9j6Z/wBA6y/78L/hR/Y+mf8AQOsv+/C/4V8zN4k8Qb/l13Vs f9fkn+NSS+Ktbt41M+vamin1u5M/zptJbjSb2PpX+x9M/wCgdZf9+F/wo/sfTP8AoHWX/fhf8K+Z LXxrfzCYjxHqoEfRjdSYP/j1Jb+M9Uu5DHB4h1TeOdhu5ASPzqU4suVOSPpz+x9M/wCgdZf9+F/w o/sfTP8AoHWX/fhf8K+bB4j1/H/Ic1Q/9vcn+NanhbXtbm8UaPFNrOpSRPeQq6PdOVYFxkEZ5FXy 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 --14dae93408f7fa650f04bbc5399d--