Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 计划将SQL数据库导出到NoSQL以进行图形数据挖掘有意义吗?_Mysql_Neo4j_Graph Databases_Extraction_Nosql - Fatal编程技术网

Mysql 计划将SQL数据库导出到NoSQL以进行图形数据挖掘有意义吗?

Mysql 计划将SQL数据库导出到NoSQL以进行图形数据挖掘有意义吗?,mysql,neo4j,graph-databases,extraction,nosql,Mysql,Neo4j,Graph Databases,Extraction,Nosql,计划将我的SQL数据库导出到图形数据库(如Neo4j)以生成关系的交互式图形(如)对我来说有意义吗 更新:或者进一步说,我是否应该转向图形数据库 我的图形数据库不需要是关系数据库的真实反映——每隔几天提取一次就足够了 在我的例子中,我目前有一个关系数据库(MySQL),我在其中记录在个人/仓库之间传递的库存项目。概念如下: 项目: STOCKID DISPATCHDATE 0001 2014-01-01 0002 2015-06-03 USERID FIRSTNAME 0001

计划将我的SQL数据库导出到图形数据库(如Neo4j)以生成关系的交互式图形(如)对我来说有意义吗

更新:或者进一步说,我是否应该转向图形数据库

我的图形数据库不需要是关系数据库的真实反映——每隔几天提取一次就足够了

在我的例子中,我目前有一个关系数据库(MySQL),我在其中记录在个人/仓库之间传递的库存项目。概念如下:

项目:

STOCKID DISPATCHDATE
0001    2014-01-01
0002    2015-06-03
USERID FIRSTNAME
0001   Tom
0002   Jones
DEPOTID ZIPCODE
0001    50421
0002    71028
STOCK_ID USER_ID RECEIVED   DISPATCHED
0001     0001    2015-05-01 2015-05-10
0001     0002    2015-05-11 2015-05-20
个人:

STOCKID DISPATCHDATE
0001    2014-01-01
0002    2015-06-03
USERID FIRSTNAME
0001   Tom
0002   Jones
DEPOTID ZIPCODE
0001    50421
0002    71028
STOCK_ID USER_ID RECEIVED   DISPATCHED
0001     0001    2015-05-01 2015-05-10
0001     0002    2015-05-11 2015-05-20
仓库:

STOCKID DISPATCHDATE
0001    2014-01-01
0002    2015-06-03
USERID FIRSTNAME
0001   Tom
0002   Jones
DEPOTID ZIPCODE
0001    50421
0002    71028
STOCK_ID USER_ID RECEIVED   DISPATCHED
0001     0001    2015-05-01 2015-05-10
0001     0002    2015-05-11 2015-05-20
所有者:

STOCKID DISPATCHDATE
0001    2014-01-01
0002    2015-06-03
USERID FIRSTNAME
0001   Tom
0002   Jones
DEPOTID ZIPCODE
0001    50421
0002    71028
STOCK_ID USER_ID RECEIVED   DISPATCHED
0001     0001    2015-05-01 2015-05-10
0001     0002    2015-05-11 2015-05-20
从NoSQL数据库中,我希望能够直观地看到以下内容:

  • 项目经过的人员流(以及每个关系的日期)
  • 哪些项目位于每个单独/仓库(在给定日期)
  • 哪些人在哪个仓库(在给定日期)

正如N.B.在评论中所说,如果该工具有用,那么就使用它——最糟糕的情况是,你发现该工具根本没有用,然后停止使用它(在设置它时浪费了一些时间,但这就是生命)

通常,有三种方法可以同步数据库:

  • :在一个事务中修改MySql,在另一个事务中修改Neo4j,如果任一事务失败,则回滚两个事务;直到两个事务都发出可以提交的信号,事务才会提交。这提供了最高的数据完整性,但非常昂贵
  • 松散同步事务:在一个事务中修改MySql,在另一个事务中修改Neo4j,如果一个成功,另一个失败,则重试失败的事务几次,如果仍然失败,则决定执行什么操作(例如,撤消成功的事务,由于事务已提交且值可能已被使用而变得复杂;或记录错误并要求数据库管理员手动同步数据库;或第三个选项)。这提供了良好的数据完整性,比两阶段提交更便宜,但如果出现严重错误,则更难恢复
  • 批同步:修改MySql,然后在一段时间间隔(五分钟、一小时,任何合适的时间)后,根据行版本号或时间戳将更改与Neo4j同步(请注意,如果同步的数据有点太多,这不是什么大问题,因为您只会用相同的值覆盖一个值,所以在每批同步太多的情况下会出错)。此解决方案易于编程,并且适用于Neo4j不需要最新和最大数据的情况

  • 我曾参与过一个类似的项目,我们使用松散同步的事务将MySql与键值nosql数据库(缓存昂贵的查询)同步。我们编写了一个定制的
    事务
    包装器,其中包含一个并发的副作用队列(即对键值数据库所做的更改);如果MySql事务成功,那么我们将队列中的所有副作用提交给键值数据库(在暂时性网络故障的情况下进行三次重试,之后我们记录错误,使键值数据库条目无效,这将导致MySql的回退,并通知数据库管理员-有一次键值数据库长时间崩溃,并通过运行批同步来解决),否则我们会放弃它们。

    我认为在开始迁移之前,有一些问题值得问你自己:

    • 我可以在不迁移/添加新数据源(使用MySQL)的情况下进行图形表示吗
    • 当使用这种图形界面时,我需要多大程度的效率
    • 在这种情况下,添加新数据源有多容易
    你在视频中看到的东西是由一个可视化组件对数据库或平面文件中的一些数据进行处理的,所以我认为第一个问题的答案可能是肯定的

    取决于有多少人和它将使用这种图形表示的用户类型(内部或外部、分析师或非分析师等),这可能是决策的另一个驱动因素

    关于第三个问题,我认为@Zim Zam O'Pootertoot已经涵盖了另一个答案的副本。与往常一样,对于许多数据源,问题总是保持同步,以及实体解析问题(使用相同的数据集将其最小化)

    根据我的经验,Neo4J非常擅长的是“模式”查询:给定一个特定的网络模式(用Cypher语言绘制),它将应用并找到它到网络数据集。 当它是关于邻居查询SQL解决方案时,在小项目中,可以得到相同的结果而不存在太多的问题。当然,如果您的解决方案必须扩展到数百个分析师,并且每天有成千上万的查询要考虑移动。

    无论如何,在我看来,考虑到您的数据集,您正在处理一种基于时间的数据类型。在这种情况下,有必要查看网络的动态行为,以找到时间模式,而不是简单的网络模式。 从你发布的视频的同一个作者那里,我们也来看看这另一个

    如果您想对基于时间的图进行建模,请注意,目前还没有一个针对任何数据源的防弹解决方案

    在基于时间的数据集的情况下,您可以对数据进行建模和表示。 我打赌你也可以用MySQL做类似的事情(可能查询的效率和优雅度都比较低),但我自己还没有做过,所以没有给出一些数字——也许是其他人做的,可以在这里添加一些基准测试

    免责声明:我在KeyLines团队工作