NoSQL指的是打破关系数据库和ACID保证历史的非关系数据存储.流行的开源NoSQL数据存储包括:
我想知道您的具体问题 - SO读者 - 使用数据存储解决了您使用的NoSQL数据存储.
问题:
我正在寻找第一手经验,所以除非你有这个经验,否则请不要回答.
database nosql graph-databases key-value-store distributed-database
我经常使用Relational DB,并决定冒险使用其他类型的.
这个特别的产品看起来很好,很有希望:http://neo4j.org/
有没有人使用基于图形的数据库?可用性的优点和缺点是什么?
您是否在生产环境中使用过这些产品?提示您使用它们的要求是什么?
我开始使用REST API使用Neo4j进行开发.我看到有两个选项可用于执行复杂查询 - Cypher(Neo4j的查询语言)和Gremlin(通用图形查询/遍历语言).
这就是我想知道的 - 有没有任何查询或操作可以通过使用Gremlin完成,而不能用Cypher完成?或相反亦然?
Cypher对我来说似乎比Gremlin要清楚得多,而且一般来说Neo4j中的人似乎都会选择Cypher.但是 - 如果Cypher与Gremlin相比有限 - 我真的很想提前知道.
有人可以向我解释一个关系数据库(例如MySQL)与Neo4j等图形数据库相比的优缺点吗?
在SQL中,您有多个表,其中各种ID链接它们.然后你必须加入连接表.从新手的角度来看,为什么要将数据库设计为需要连接,而不是将连接从一开始显示为边缘,就像使用图形数据库一样.从概念上讲,对新手来说没有任何意义.据推测,这有一个非常技术但非概念性的原因?
我一直在设计一个基于.NET/Mono框架的应用程序,它应该大量使用图形理论中的最短路径,我想使用本机解决方案来遍历图形的节点,而不是实施替代解决方案,这些解决方案难以维护并且会对性能产生巨大影响.
我找到了一个适合我的范围的应用程序:neo4j.
不幸的是,这个应用程序纯粹是用Java代码编写的,并且它不能移植到.NET,因为这两种架构之间存在巨大差异.
有没有人知道是否有任何neo4j的端口或类似的.NET解决方案?
我将使用许多类似的项目(数百万)创建一个应用程序,我想将它们存储在MySQL数据库中,因为我想做大量的统计信息并搜索特定列的特定值.
但与此同时,我将存储所有项目之间的关系,这些项目在许多连接的二叉树结构(传递闭包)中相关,而关系数据库并不擅长这种结构,所以我想存储Neo4j中的所有关系都具有良好的性能.
我的计划是将所有数据除了MySQL数据库中的关系以及item_id存储在Neo4j数据库中的所有关系.当我想查找树时,我首先在Neo4j中搜索树中的所有item_id:s,然后在MySQL数据库中搜索查询中的所有指定项,如下所示:
SELECT * FROM items WHERE item_id = 45 OR item_id = 345435 OR item_id = 343 OR item_id = 78 OR item_id = 4522 OR item_id = 676 OR item_id = 443 OR item_id = 4255 OR item_id = 4345
这是个好主意,还是我错了?我之前没有使用过图形数据库.有没有更好的方法解决我的问题?在这种情况下,MySQL查询将如何执行?
我知道Stackoverflow上有类似的问题,但我觉得他们没有回答以下问题.
图表数据库对我的理解存储数据主要遵循以下模式:
Table/Collection 1: store nodes with UID
Table/Collection 2: store relations referencing nodes via UID
Run Code Online (Sandbox Code Playgroud)
这允许存储任意类型的图形.现在据我所知,三重商店只存储三元组:
Triple/Collection 1: store triples (2 nodes, 1 relation)
Run Code Online (Sandbox Code Playgroud)
现在我将看到有关用例的以下区别:
我很困惑的是,人们似乎根据这些标准没有讨论使用哪一个.我发现的大多数文章都在谈论速度或兼容性等论点.但这不是最重要的一点吗?
反过来说:
subject.编辑:我看到"失去关于连接的信息"是错误的方式.如果您按照接受的答案中所示执行操作并为2个节点+ 1个关系插入多个三元组,那么您将保留所有信息,特别是信息确切的节点连接的信息.
基于图形的数据库(http://neo4j.org/)和面向对象的数据库(http://www.db4o.com/)之间有什么区别?
database db4o neo4j graph-databases object-oriented-database
我在Google和SO上找到了几个选项的链接,但没有关于现实应用程序中现有实现和用法的大量信息.
我还考虑过使用文档数据库(如RavenDB或MongoDB)和专用的三重存储或RDBMS(如SQL)之间的混合,并扩充数据存储以支持我想要的功能.然而,这可能是相当多的工作,我希望其他人已经完成了它.
三位一体 - 这个是由微软制作的,而且文献听起来很棒,但我找不到下载链接,而且发布页面上写着"Trinity包目前仅用于内部网访问.".
db4o - 这是一个面向对象的数据库,本机支持.NET和Java.它似乎作为图形DB销售,但我不确定"图形"结构/操作是隐式还是显式(或者它是否提供比任何其他文档数据库更多).
TinkerPop - 这个项目看起来就像我正在寻找的,但是github源代码似乎只在Java中.这从graph-database.org SlideShare上讨论.NET版本,但我一直没能找到他们.
CloudGraph - 听起来不错,但似乎不存在.
GiraffeDB - "GiraffeDB是一个功能强大的.NET框架4.0图形数据库系统,能够以高效且易于访问的方式表示复杂的语义""目前正在进行规划".
AllegroGraph 4.7 - 这看起来非常成熟(支持SPARQL和Prolog以及许多客户端接口),但它是封闭源代码.我显然会对一个我没有听说过的闭源项目持怀疑态度.
还有一些看起来非常有前景的Java项目(HyperGraphDB和Neo4j,但我还没有看到任何现有的.NET集成.我并不是完全反对使用Java解决方案并自己做这项工作,但又一次,我更喜欢经过验证的解决方案,可以节省我最多的时间.