基于cassandra的图形数据库
agamemnon的Python项目详细描述
阿伽门农
阿伽门农是一个建立在皮卡萨之上的薄图书馆。 它允许您将cassandra数据库(<;http://cassandra.apache.org>;)用作图形数据库。 使用cassandra提供了极高的可靠性和可扩展性,这在其他系统中是不可用的。 图形数据库。Cassandra通过配置为数据分区和复制提供集成支持。
大部分api的灵感来自于优秀的neo4j.py项目(<;http://components.neo4j.org/neo4j.py/snapshot/>;), 然而,这一一揽子计划中的支持与该项目有所不同。
agamenon还通过rdflib(http://www.rdflib.net/)集成了rdf支持
用法
下面是如何在自己的代码中使用agamenon的示例
>>> from agamemnon.factory import load_from_settings
首先,我们可以决定创建哪种数据存储。在这种情况下,我们将创建一个内存数据存储区
>>> config = {'backend': 'agamemnon.memory.InMemoryDataStore'} >>> graph_db = load_from_settings(config)
为了纪念辛普森一家的电影,我们将创建一个名为spiderpig的节点
>>> spiderpig = graph_db.create_node('test_type', 'spiderpig', {'sound':'oink'})
现在我们将从图中检索spiderpig并检查属性是否正确。
>>> spiderpig = graph_db.get_node('test_type', 'spiderpig') >>> spiderpig['sound'] 'oink'
现在我们将为蜘蛛猪(碰巧也是他的另一个自我)创建一个朋友。再次,让我们检查 确认节点及其属性已正确创建。
>>> harry_plopper = graph_db.create_node('test_type', 'Harry Plopper', {'sound':'plop'}) >>> harry_plopper = graph_db.get_node('test_type','Harry Plopper') >>> harry_plopper['sound'] 'plop'
节点也可以有不同的类型。在这里,我们创建一个simpson类型的节点,名为homer。此节点具有 与以前的节点不同的属性。
>>> homer = graph_db.create_node('simpson', 'Homer', {'sound':'Doh', 'job':'Safety Inspector'}) >>> homer = graph_db.get_node('simpson', 'Homer') >>> homer['sound'] 'Doh' >>> homer['job'] 'Safety Inspector'
节点本身不是很有用。让我们在蜘蛛猪和哈利·普洛普之间建立一种关系。
>>> rel = spiderpig.friend(harry_plopper, key='spiderpig_harry_plopper_alliance', alter_ego=True, best=False)
这就形成了一种朋友式的关系。在这种情况下,已指定了密钥,但这不是必需的。 如果没有提供键,则将为关系生成uuid。
每个节点类型都有一个“引用节点”。这是类型的元节点,用作 给定类型。
>>> reference_node = graph_db.get_reference_node('test_type')
从test_类型引用节点获取实例应该返回harry plopper节点和spiderpig节点。
>>> sorted([rel.target_node.key for rel in reference_node.instance.outgoing]) ['Harry Plopper', 'spiderpig']
在这一点上,蜘蛛猪应该只有一个朋友,而且应该是哈里·普洛普。
>>> friends = [rel for rel in spiderpig.friend]
>>> len(friends) 1
>>> friends[0].target_node.key 'Harry Plopper'
现在让我们确认哈利·普洛普和蜘蛛猪也是朋友:
>>> 'spiderpig' in harry_plopper.friend True
再一次,确保蜘蛛猪是哈利·普洛普唯一的朋友:
>>> friends = [rel for rel in harry_plopper.friend]
>>> len(friends) 1
>>> friends[0].source_node.key 'spiderpig'
他们不应该是最好的朋友。我们确认一下:
>>> friends[0]['best'] False
荷马是蜘蛛猪最好的朋友:
>>> rel = homer.friend(spiderpig, best=True, alter_ego=False, type='love', strength=100)
在这里,我们为关系添加了其他属性。
现在蜘蛛猪应该有两个朋友了。
>>> friends = [rel for rel in spiderpig.friend] >>> len(friends) 2
您可以使用特定键获取节点与其他节点之间特定类型的所有关系的列表
>>> homer_spiderpig_love = spiderpig.friend.relationships_with('Homer') >>> len(homer_spiderpig_love) 1
>>> homer_spiderpig_love = spiderpig.friend.relationships_with('Homer') >>> print homer_spiderpig_love[0]['strength'] 100
感谢
此项目是globusonline.org项目的扩展,用于为即将发布的globusonline.org版本提供支持。我要感谢Ian Foster和Steve Tuecke领导这个项目,以及云服务团队的所有成员,特别是Vijay Anand、Kyle Chard、Martin Feller和Mike Russell,感谢他们帮助设计和测试。我还要感谢bryce allen对python学习曲线的帮助。
0.3.1.0
- 添加了许多测试并修复了某些操作的错误
- 通过rdflib添加了rdf支持
0.2.1.3
- 修复了内存列比较的错误
0.2.1.2
- 用根引用节点修复bug,添加对Unicode序列化的支持和碰撞版本Num
0.2.1.1
- 添加方法以获取所有关系,而不考虑类型
- 删除生成的文档文件并更新index.rst
- 将doctest添加到usage documentation and setup.cfg
- 更新安装文件有要求的ES
- 对globusonline发现的问题进行多项修复
0.2.1.0
- 添加了对contains运算符(具有relationships_with(other_node_key)函数)的支持,并添加了pr的类型转换
- 正在合并来自GlobusOnline的关系代码
0.0.1.3
- 更新datastore.save_节点,使其不再使用批存储