请注意,我们在此处明确指定我们的键,但不需要,如果未指定,则将为您生成随机密钥。

>>>T.=Task()>>>T.key{'column_family': 'Task','keyspace':'taskManager','super_column':无,'key': 'cff715a0f7cf4f5bb78e70cab6bcd867'}

现在我们已经救了我们的Task我们可以随意检索它。

>>>T.2=Task()加载TaskKey“my-project-a")))>>>T.2Task: {'name': 'My Project A', 'desc': 'Build the critical A project'}

它的行为类似于检索特定值的字典,也可以使用字典语法进行更新。注意保存在Cassandra更新数据是必需的。

>>>T.2['名称']'我的项目A'>>>T.2['名称']=“一个新的项目”>>>T.2Task: {'name': 'A newer project','desc':'Build the critical A project'}>>>T.2保存()Task: {'name': 'A newer project','desc':'Build the critical A project'}

Finally, we can also delete our task.

>>>T.2去掉()任务: {}>>>Task()加载TaskKey“my-project-a")))Traceback (most recent call last):File"那line1那在File“/Library/Python/2.6/site-packages/Lazyboy-0.7.5-py2.6.egg/lazyboy/record.py"那line184那在加载columns=迭代器slice_iterator.keyconsistencyFile“/Library/Python/2.6/site-packages/Lazyboy-0.7.5-py2.6.egg/lazyboy/iterators.py"那line50那在slice_iterator.raiseexc挖ternochrecord.“没有记录匹配的键%S.keylazyboy.exceptions.Errornosuchrecord:没有符合符合键的键{cloun_family':'task','keyspace':'taskmanager','super_column':none,'key''我的项目-A'}

使用这些示例,您可以使用足够的材料来使用Cassandra作为一个简单的键值存储,但严格限于kV商店不足以开发某些类别的应用程序,因此我们幸运的是Cassandra给我们相当多更多的。

检索许多专栏

除了检索特定键外,我们还可以迭代所有密钥ColumnFamily。To simplify the example, let's pretend that we have this function defined:

defadd_member.用户名第一的last):m=成员()mkey=成员Key用户名m['第一的']=第一的m['最后的']=lastm保存()mv=成员sView()mv附加m

In particular notice the last two lines where we explicitly add the new成员到了成员sView。This is critical for making the member retrievable via the operations we look at below.

Now let's try iterating through our成员列。

>>>成员s=(('a''a''last_f'),。。。'b''b''last_c'),。。。'c''c''last_d'),。。。'd''d''last_e'),。。。'e''e''last_a'),。。。'f''f''last_b')))>>>>>>为了成员成员s。。。add_member.成员[0.],成员[1],成员[2])。。。>>>len成员View())6.>>>为了m成员View():打印m。。。会员:{'last':'last_f','first':'a'}会员:{'last':'last_c','first':'b'}成员:{'最后的':'last_d'那'第一的':'c'}会员:{'last':'last_e','first':'d'}成员:{'最后的':'last_a'那'第一的':'e'}成员:{'最后的':'last_b'那'第一的':'f'}

除此之外,我们还可以通过定义我们想要开始迭代的键来迭代列的子集:

>>>mv=成员View()>>>mvstart_col.=“C”>>>为了mmv打印m。。。成员:{'最后的':'last_d'那'第一的':'c'}会员:{'last':'last_e','first':'d'}成员:{'最后的':'last_a'那'第一的':'e'}成员:{'最后的':'last_b'那'第一的':'f'}

You'd think there would be a way to specify the end range for this iteration, and there is, although it involves a bit of trickery at this point (likely a minor oversight in the API design, I'll put together a quick patch after writing this up).

>>>mv=成员View()>>>为了一种mv_cols“C”“e”):打印一种。。。列(时间戳= 1274654073,name ='c',值='c')Column(timestamp=1274654073, name='d', value='d')Column(timestamp=1274654073, name='e', value='e')

Now we've moved from only using Cassandra as a key-value store to also being able to iterate through all of portions of the keys in a givenColumnFamily

管理关系

实施我们的主计划的最后一步是存储列表成员分配给特定的TaskAt the simplest you might try storing a comma-separated list of keys in theTask本身,但这种方法将变得不可靠,因为写卷增加,因为没有对冲突的价值合并,而是最新的写入胜利。(我意识到这有点手摇,但我从未成功解释过这个恰当地解释,所以我需要投入另一个进入它,而不是试图在这个中雄心勃勃。)

相反,更成功的方法是使用一个新的ColumnValue(为了us,任务员)存储关系。对于每一个人Task我们还将创造一个新的任务员使用相同的关键,​​并将使用它来存储关系成员s.

首先让我们创造一些成员和一个Task,也创造一个任务员与之具有相同的关键Task

>>>任务import*>>>add_member.“将要”“将要”“Larson”>>>add_member.“bill"“bill"“fakename">>>add_member.“jill"“jill"“姓氏”>>>Task()update({“名称”“Web App 1”“desc”:“We will build a fantastic web applicaiton"}).save()>>>T.key{'column_family': 'Task', 'keyspace': 'TaskManager','super_column':无,'key': '52a6c23e1afd480991e2232f5e7d9ba8'}>>>T.keykey'52A6C23E1AFD480991E2232F5E7D9BA8'>>>T.m=任务员()>>>T.mkey=Taskmemberkey.T.keykey>>>T.m保存()任务员:{}>>>T.v=TaskView()>>>T.v附加T.

现在让我们加入Will和Jill到任务,同时留下寂寞的票据。

>>>T.m=任务员()加载Taskmemberkey.T.keykey)))>>>将要=成员()加载成员Key“将要”)))>>>将要keykey'将要'>>>T.m[将要keykey]=1>>>jill=成员()加载成员Key“jill")))>>>T.m[jillkeykey]=1>>>T.m保存()

Yep, all we're doing is adding a new key/value for each of the users we want in the project. A less contrived version of what we just did looks like:

>>>T.mupdate({“将要”1“jill"1})保存()任务员:{'意志':'1','jill':'1'}

这n you can simply retrieve it and iterate through it to determine the current members assigned to the task:

>>>T.m=任务员()加载Taskmemberkey.T.keykey)))>>>为了一种T.m打印一种。。。将要jill

这's all there really is to it. Now we can do relations, key-values and iteration across ranges. There isn't too much out that which you can't build with these simple tools.

这End

This code is available on