我正在测试Neo4J作为我的应用程序数据库(SQL Server或Oracle)的搜索数据库。我的目的是抓取RDBMS数据库并将可搜索的内容复制到Neo4J。稍后,当用户请求搜索时,我可以使用Neo4J的图形搜索功能在我的RDBMS数据库中查找记录,方法是在Neo4J上执行搜索,返回符合搜索条件的主键值。
我使用Neo4Client编写了一个小型C#应用程序,它从RDBMS数据库读取两个表并创建节点之间的节点和关系。此示例中的两个表是公式标题及其子表,公式成分。
在一个小型数据库(两个表中约50行和~250行)中,我的抓取非常快。但是,使用大型客户数据库(~550K和~6M行)测试应用程序时,爬行过程证明速度太慢。在我用于测试/研究的一些旧硬件上我得到~4行/秒(估计36小时爬行550K表)。在我的新开发系统上,我得到~14行/秒(估计需要10个小时来爬行550K表)。
我知道Neo4JClient驱动程序使用的是Neo4J REST接口,并且给出了类似的question,看起来Neo4J不适合我的项目。
我考虑过多线程,但我不认为这适合这种情况。我打算多线程化这个应用程序,但不打算在被抓取的单个表上。我想要抓取的RDMBS中的表在逻辑上是相关的,因此是Neo4J关系,并且有几组这些表组。我曾计划在每个表集上旋转一个线程。最终,我需要抓取12组表中的75个表,我认为这种性能水平对于生产环境来说是不切实际的。
我有posted我的示例代码,希望有人可以告诉我,我正在以不太理想的方式做某事。有一件事我想知道是否有办法创建一个索引和关系的节点?目前这是一个两步过程,虽然它不会影响我上面提到的性能数字,因为550K表的代码不使用关系。我的测试应用程序首先创建标题节点(550K表,这是我上面提到的性能数据所基于的),然后创建成分节点和与标题节点的关系。我预计当我测试配料节点的创建时,我的性能数字会更慢。
谢谢!