基于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_节点,使其不再使用批存储

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java我能知道文件的哪个条目正在被修改吗?   多线程Java并发线程   java抓取包含多个页面的多个字母标签的网站   为什么if语句不排除Java中的另一个if语句?   Java可序列化哈希映射到ByteArray以创建blob   JavaEclipseLombokBuilder添加新建议   java将文件路径数组转换为文件数组,并计算每个文件的大小   在Java8流中添加大小数   Bouncy Castle 1.46之前版本的java兼容性问题   无法在AWS设备场上运行安卓 Java Appium测试   java为什么不使用mavenwarplugin将键与“WEBINF/classes/METAINF/MANIFEST.MF”合并?   java如何在引用子类的成员时调用super()   找不到java TestFx无头MonoclePlatformFactory   java AbstractMethodError onClientSessionEvent和“缺少控制媒体的权限”   正则表达式如何使用JAVA在字符串的大写字母前插入空格?   我的Spring安全项目中的java BCrypt(Spring安全)   java在我的网站上查看小程序更新时遇到问题   java如何使用schedule方法