日期:2014-05-16  浏览次数:20597 次

Cassandra数据模型---理解Columns

Columns

?

column是cassandra数据模型中最小的数据单元,基本结构包含了 name, value, timestamp 我们来看以下的数据结构:

?

Contact: {      
    ian: {      
        name: "Ian Wu" ,    
        phone: "3939889",     
        birthday: "1983/01/01",     
        email: "ianwu@example.com"     
    }      
    john: {      
        name: "John Li" ,   
        phone: "4499888",     
        birthday: "1984/02/02",     
        email: "johnli@example.com",     
        age: "23",   
        gender: "male",
    } 
} 

?从上面的数据中我们可以清楚的看出包含了ian和john的各自信息,里面的name、phone等都是Contact的column,我们拿name:"Ian Wu"这个column来看,它是一个标准的column,他的结构应该是这样的

?

{
    name: "name",
    value: "Ian Wu",
    timestamp: 123456789
}

?

Cassandra里还有另一种column那就是Super Columns,Super Column结构包含了name与value,同時Super Column內的value是column的集合,以下是一个简单的super column数据:

Address: {      
    ian: {      
             work: {
                        street: "abc rd.", 
                        city: "Taipei County", 
                        zip: "251"
             },    
             home: { 
                       street: "def rd.",
                       city: "Taipei City",
                       zip: "108" 
            }        
    }      
    john: {      
               work: {
                    street: "abc rd.", 
                    city: "Taipei County", 
                    zip: "251"
               },    
               home: { 
                    street: "def rd.",
                    city: "Taipei City",
                    zip: "108" 
              }
    } 
} 

?

从上面的数据可以看出名为Address的columns family中存放了ian和john的地址信息,地址信息分为work与home两类。

work: {
           street: "abc rd.", 
           city: "Taipei County", 
           zip: "251"
}

以上面的数据为例,它的数据结构应表示为:

{  
    name: "work",
    value: {
        street: {
             name: "street", 
             value: "abc rd.",
             timestamp: 123456789
        },
        city: {
             name: "city",
             value: "Taipei County",
             timestamp: 123456789
        },
        zip: {
             name: "zip",
             value: "251",
             timestamp: 123456789
        }
    }
}

?这个 super column 记录了work的地址数据,同时zip, city, street 分別再以column來表示,形成一組 column set,有一点需要注意的是super column 沒有时间戳。