在格里姆林
我知道第一个是OLTP,第二个是OLAP。我知道OLAP和OLTP在定义级别上的区别,我对此有以下查询:
你是如何
提前谢谢。
发布于 2016-10-07 10:59:32
从用户的角度来看,在结果方面,OLAP和OLTP之间没有真正的区别。Gremlin语句对于TraversalSource的配置与使用withComputer()和其他设置时显示的一样。
不同之处在于如何在幕后执行遍历。基于OLAP的遍历用于处理“整个图”(即所有顶点/边,可能不止一次)。其中,基于OLTP的遍历用于处理较小的数据体,通常从一个或少数几个顶点开始,然后从那里遍历。当您考虑规模为“数十亿边”的图时,很容易理解为什么需要像OLAP这样的高效机制来处理这些图。
你真的不应该把OLTP和OLAP看作是“更快”和“更慢”。也许最好像在文档中描述的那样去想一想
只要应用程序知道该遍历的需求,就没有理由不能在应用程序中使用OLAP遍历。如果您有一些SLA,其中规定REST请求必须在0.5秒内完成,并且决定使用OLAP遍历来获得答案,那么无疑会破坏SLA。假设您在Spark上执行OLAP遍历作业,那么只需10-15秒就可以组织起来运行您的作业。
我不知道如何提供OLAP和OLTP的示例,只是稍微多谈一下用例,所以应该清楚什么时候使用其中一个而不是另一个。无论如何,让我们假设你有一个有100亿个边的图。您可能希望您的OLTP遍历始终以某种形式的索引查找开始--比如显示用户朋友的平均年龄的遍历:
g.V().has('username','stephenm').out('knows').values('age').mean()但是,如果我想知道数据库中每个用户的平均年龄怎么办?在这种情况下,我没有任何索引可以用来查找一个“小的起始点集”--我必须处理我的图中所有的数百万/数十亿个顶点。这是OLAP的完美用例:
g.V().hasLabel('user').values('age').mean()OLAP对于理解图形的增长和维护图形也是很好的。有着数以十亿计的边缘和较高的数据摄取率,不知道你的图表正在不适当地增长就是死刑。使用OLAP获取图表中所有数据的全局统计信息是很好的:
g.E().label().groupCount()
g.V().label().groupCount()在上面的例子中,您将得到一个边缘/顶点标签分布。如果您知道图形是如何增长的,这可以很好地指示您的数据摄入过程是否正常工作。在十亿个边图上,尝试执行哪怕一条遍历都需要“永远”,如果它完全没有出错的话。
https://stackoverflow.com/questions/39910552
复制相似问题