使用django设计大型数据应用程序

时间:2015-04-10 06:02:14

标签: django

我有设计任务,想要专家意见。 我想存储一些看起来像这样的数据:

id,username,pass,small_pdf_doc,very_large_file - > (二进制30GB)

我想使用python,但可以自由选择:

  • nosql db
  • relational db
  • 将数据存储在关系数据库中,除了very_large_file并将其存储在驱动器上并将文件名映射到数据库

我需要解决方案可扩展。您认为什么是最佳解决方案? 我做了一些调查,我考虑过使用mondodb或cassandra。

你认为它们都可以扩展吗?查询会随着时间的推移而减速吗? 此外,我读了mongodb文档,它说不支持并行写入,但有锁。 如果请求2个并行写入,数据库是否会中断,或者第二个是否会失败,或者计划同时执行这两个操作?

最后,如果我只是存储文件名与磁盘上的id匹配的大文件而不是将它们放在数据库中,那不是更好吗?这样可以更容易备份并允许并行化。

2 个答案:

答案 0 :(得分:1)

我建议使用关系数据库来存储idusernamepass,并将大文件放到文件系统中,甚至更好地放到像amazon s3这样的东西。这样可以很好地扩展。在我看来,你的大多数数据看起来都像典型的关系数据,所以我会继续使用它。

答案 1 :(得分:1)

您应该将文件存储和数据库分开:

  • 对于id, username, pass,您应该使用经典的关系数据库作为PostgreSql。没有太多的数据需要存储,它会很好地消失。

  • 对于pdf_filebinary data,您应使用外部存储空间Amazon S3 bucket。这样做可以确保(“无限”)可扩展性。

一些有用的链接:

  • Django Storages让django处理exernal存储。
  • Django direct S3 uplaod由于您的文件非常大,显而易见的解决方案是直接将文件上传到S3存储后端。我没有测试过这款应用,但它举了一个例子。

您可以通过搜索“Django amazon S3直接上传”

在Google上找到更多内容