Neo4J:二进制文件存储和文本搜索"stack"



我有一个项目想做,我觉得这是Neo4j的一个很好的案例。但是,关于实现这一点,我对某些方面的理解不够,无法简明扼要地列出我的问题。因此,我将让这个场景不言自明:

场景:简单地说,我想构建一个应用程序,允许用户接收各种类型的文件,如文档、excel、word、图像、音频片段甚至视频,尽管不是很多视频,并允许他们上传和分类这些文件。

对于每个文件,他们将进入任何和所有的关联。示例:

  • 如果Joe编写了PDF,则Joe与该PDF关联
  • 如果DOC说Sally是Mary的母亲,则Sally与Mary有关联
  • 如果Bill向Jane发送了电子邮件,则Bill与Jane(以及电子邮件)关联
  • 如果X公司向Y公司发送发票(Excel网格),则X与Y关联

等等…

因此,目前的基本目标是:

  • 让用户在收到文件时加载文件
  • 输入每个文件包含的关联
  • 全面回顾关联,以便预测或采取一些行动
  • 生成感兴趣的关联的报告,包括关联所基于的文件

这个项目的价值在于关联,事实上,关联会比上面的例子复杂得多,应该会产生有趣的结论。然而如果用户被问到"你是如何得出这个结论的",他们需要能够生成关联的摘要以及这些关联所基于的任何文件,即PDF或EXCEL或其他文件。

最初的想法

我还应该补充一点,这个应用程序将在内部托管,可能有大约50名用户使用,所以我可能不需要超级重复、最快、可扩展、高可用性的解决方案。不过,加载的数据可能会变得相当大,一年内可能高达1TB?(不是关联,而是实际文件)

如果Neo4J能做到这一切,那岂不是太好了!显然,它应该能很好地处理这方面的图形,但我认为文件存储和文本搜索需要添加另一个播放器。

我所知道的一些解决方案组合是:

  • 将包括文件在内的所有内容存储为Neo4J中的二进制文件

    会为Neo4J的一些不适合它的东西而摔跤。如何搜索文本?

  • 仅在Neo4J中存储关联和元数据,并在文件系统中上传文件

    如何对存储在文件服务器上的文件进行文本搜索?

  • 只在Neo4J中存储关联和元数据,并在Postgres中上传文件

    对数据库中包含我的所有文件不太有信心。在文件夹中访问我的所有文件会让我感觉更舒服。

    每个人都说把你的文件放在数据库里很好。每个人都说把你的文件放在数据库里不太好。

进入血腥的问题

  1. 有人能提出一个适合上述情况的好"堆栈"吗
  2. 请大致介绍一下你将如何实施你的建议,即:

    • 让应用程序将数据存储到Neo4J中,然后使用触发器更新Postgres
    • 或者将文件加载到Postgres中并触发更新Neo4J
    • 或者让应用程序将数据加载到Nea4J,然后将数据加载至Postgres
    • 等等

你会如何把这些联系在一起,这可能是我真正想掌握的。

非常感谢您对此提供的意见。

干杯。

多么无聊的漫步!如果你觉得有必要编辑我的问题或标题以简化,那就去做吧!:)

以下是我的建议:

  • 永远不要在数据库中存储二进制文件。存储在文件系统或类似AWS S3的服务中,并在数据模型中引用该文件
  • 我会先将文件存储在S3中,并在您的主数据库(Neo4j?)中引用它
  • 如果你想在文档中搜索任何单词,我建议你使用像Elastic search这样的全文搜索引擎。Elastic Search可以使用Tika扫描多种文档格式,如PDF
  • 您可能还可以使用Elastic/Tika来搜索文档中的关系,并将它们显示出来以更新图形

建议堆叠:

  • Neo4j
  • ElasticSearch
  • AWS S3或其他一些冗余文件系统,以避免数据丢失

额外奖励:请参阅此SO问答,了解使用ES.

以多种格式索引文件的最佳实践

最新更新