将数据从MySQL传输到Neo4j

时间:2013-11-07 16:27:37

标签: python mysql django neo4j py2neo

我们正在将基于MySQL的Django应用程序迁移到Neo4j。在MySQL中,我们有一个Providers表和一个Referrals表。引用表只有一个provider_from_id,provider_to_id和一个count列。它代表从一个提供商到另一个提供商的推荐。

我们所有的400多万供应商已经转移到Neo4j。我们计划将推荐作为Neo4j中不同提供者节点之间的关系来表示。

问题在于,有超过40,000,000行的推介,而Neo4j似乎在创建关系方面有着令人难以置信的糟糕表现。这是我们用来创建关系的脚本。在它运行的速度,它将需要超过2个月。有没有更好的方法来传输这些数据?

graph_db = neo4j.GraphDatabaseService()

# Link to providers index
providers_index = graph_db.get_or_create_index(neo4j.Node, "Providers")

# Let's start transferring!
while True:
    total_so_far = num_transferred + num_orphaned
    referrals = Referral.objects.all().order_by('id')[total_so_far:total_so_far+1000000]
        if not referrals:
            break

        for referral in referrals:
            # We need to get the nodes for both providers (assuming they exist)
            provider_from = providers_index.get("npi", referral.provider_from_id)
            provider_to = providers_index.get("npi", referral.provider_to_id)

            if provider_from and provider_to:
                # We have matches for both providers, let's create the relationship
                graph_db.create((provider_from[0], "REFERRED", provider_to[0], {"count": referral.num_referrals}))

1 个答案:

答案 0 :(得分:0)

问题是py2neo正在使用Neo4j的RESTful接口来执行所有这些插入,这意味着它将一次执行一个,具体取决于您的neo4j版本。

您是否有可能使用在初始加载时从CSV导入的Batch Importer?如果没有,您是否可以使用Java为此编写自己的本地批量导入程序?