Mongodb 关于数据库选择和实现人力资源web应用程序架构的建议

Mongodb 关于数据库选择和实现人力资源web应用程序架构的建议,mongodb,database-design,nosql,Mongodb,Database Design,Nosql,我目前正在为我朋友的公司开发一个人力资源web应用程序,我还没有决定是选择关系数据库还是NoSQL数据库,或者是混合数据库。我对这些NoSQL数据库的用例很感兴趣,这也是为什么我想到在这个项目中使用它们的原因 数据库中关系的示例场景: 员工有许多(可以是无或多): 学历记录 培训和认证记录 工作经验记录 志愿者记录 组织和其他信息记录 此外,在应用程序的决策支持方面还有很多工作要做,比如确定职业道路和为员工制定继任计划 去NoSQL路线可行吗?基于这些关系,数据库具有以employees表为

我目前正在为我朋友的公司开发一个人力资源web应用程序,我还没有决定是选择关系数据库还是NoSQL数据库,或者是混合数据库。我对这些NoSQL数据库的用例很感兴趣,这也是为什么我想到在这个项目中使用它们的原因

数据库中关系的示例场景:

员工有许多(可以是无或多):

  • 学历记录
  • 培训和认证记录
  • 工作经验记录
  • 志愿者记录
  • 组织和其他信息记录
此外,在应用程序的决策支持方面还有很多工作要做,比如确定职业道路和为员工制定继任计划

去NoSQL路线可行吗?基于这些关系,数据库具有以employees表为中心的多对多关系。在查询和性能方面,选择NoSQL而不是RDBMS会带来好处吗?MongoDB是我的首选(因为它是我读过的唯一一个NoSQL数据库)


此外,我如何处理员工照片、扫描文件和证书照片?上一次我在数据库中将图片保存为blob的应用程序中使用MySQL时,它在数据查询和查找过程中的响应性较差。

您选择使用关系数据库还是NoSQL数据库在很大程度上取决于许多因素:

  • 如何对需要存储的数据进行建模
  • 数据的预期访问模式是什么
  • 您对可伸缩性有什么要求
  • 您对数据一致性有什么要求
通常,在以下情况下,NoSQL可能更可取:

  • 无模式或动态数据结构
  • 除了使用少量索引之外,无需访问数据(即,在访问数据的方式上不需要太多灵活性)
  • 您需要水平扩展(传统上,关系数据库更难做到这一点)
  • 您可能不需要事务一致性,并且可能对最终的读取一致性没有问题(取决于您选择的NoSQL系统)
在我看来,您列出的用法似乎更符合您在典型的关系数据库支持的应用程序中看到的用法。这并不是说您应该只使用关系数据库。我认为,任何需要实现高可伸缩性的足够复杂的相互关联服务集都可能需要一系列广泛的数据存储机制——关系数据库、NoSQL、内存缓存、持久平面文件存储等。您只需根据需要考虑合并这些机制


关于您对图像存储的评论。我发现在数据库中存储图像的情况很少有意义。在大多数情况下,存储对映像位置(文件路径、URL等)的引用将是首选方法。

如果您将面临广泛的关系处理、并发请求、一致性挑战(可能涉及生产系统)并将执行大量敏感数据的大型聚合,然后使用关系数据库。如果您主要要求速度和数据一致性/关系没有那么重要(可能是web应用程序),并且需要处理复杂的基于文本的查询,那么可以使用NoSQL。更好的选择是尝试这两种方法,然后评估它们的性能,因为在这里你会得到不同的意见。我同意对业绩的评价。关于它,这是否意味着使用专门为测量它们而设计的工具(捆绑的或专有的),即mysql性能监控工具、mongodb工具等等……您可以使用特定的工具来测量它们的性能,也可以使用您自己的指标。如果你打算使用工具,我很确定有几个用例已经被人比较过了,并且可以在网上找到。但对于您的特定用例,您也可以尝试使用工具来比较它们的性能。:)在开始之前,请阅读一本涵盖此内容的数据建模书。Hay的企业模型模式或Silverston的数据模型资源书(Vols1,2)