mongodb - 使用 PostgreSQL 还是 PostgreSQL + MongoDB?

标签 mongodb postgresql geolocation scalability database-performance

我目前正在规划一个社交媒体应用程序 - 尤其是后端。 基本上我有我想使用 SQL(我猜是 PostgreSQL)的所有社交方面,但我也有组织在列表中的地理位置(如此多对一),这可能会产生最大的数据量。我知道 PostgreSQL 具有用于 GIS 功能的模块,我最初的想法是只对所有内容使用 PostgreSQL,只是为了简单起见,因为两个系统的地理定位搜索性能应该大致相同,甚至不支持 PostgreSQL。我也可以在 PostgreSQL 中使用 JSON 类型,所以它基本上涵盖了 MongoDB 最明显的优点。

另一方面,我担心可扩展性,因为地理位置将成为最大的数据 block ,而且表格可能会有大量的行。

所以我现在的想法是在 MongoDB 中实现地理定位,它具有简单的可扩展性、易于使用的地理定位搜索和嵌入,例如将地理定位的评论/喜欢直接嵌入到文档中,这将使地理定位读取/搜索方式更容易,但又一次我必须将这些数据与来自 SQL 的社交数据结合起来,例如获取所有评论地理位置的用户并从 PostgreSQL 获取他们的个人资料信息并“手动”组合它。尽管这部分可以在前端完成,但为我节省了大量资源。

我不确定这个想法的效果如何,也不确定我是否真的帮了自己一个忙。

最佳答案

tldr:使用 PostgreSQL。

长答案:

您正在尝试针对您甚至不知道是否会遇到的问题进行预优化。您不知道您将拥有多少个地理位置,您的用户的使用行为是什么,您甚至可能还没有任何用户。

我以前使用过 MongoDB,后来迁移到了 PostgreSQL。使用“真实”数据库存储高度结构化的数据有很多很多的特性和好处。我建议在谷歌上搜索“PostgreSQL vs X”文章,但我发现的总体共识是 PGSQL 极其成熟、可靠、高性能且受支持。

根据我使用 Mongo 然后切换到 PGSQL 的个人经验,除非 PGSQL(或另一个成熟的 SQL 数据库)完全崩溃并且我花了几个月的时间修复它,否则我永远不会再使用 Mongo。即便如此,我也会仔细研究其他 NoSQL 数据库。 PGSQL 有许多惊人的特性和强大的工具,使用起来非常愉快。

对于您认为需要 Mongo 的看似很少的事情,PGSQL 可以做到,而且做得一样好或更好。它具有带索引、地理支持、全文索引等的原生 JSON 类型。PGSQL 存在时间更长,支持更多(对调试、性能调整等很有用)。

无论您考虑使用哪种技术,如果您不这样做,就无法做出任何明智的决定:

  1. 使用大数据集进行测试

  1. 了解您的使用模式和数据量

所以在这一点上,我会选择更成熟、更强大的工具和设置监控。观察 PGSQL 的使用和性能,看看它是如何保持的。研究 PGSQL 的最佳实践。了解它,学习它,深入研究。在扩展单个服务时,每个服务都有些独特,不适合简单的“我应该使用 X 还是 Y?”问题。

祝你好运!

关于mongodb - 使用 PostgreSQL 还是 PostgreSQL + MongoDB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39939994/

相关文章:

SQL 查询按具有低于阈值的内部连续距离的列的最大集进行分组

android - 当手机到达一组位置时做些什么?

java - 无法构建 nosqlunit-mongodb 项目

postgresql - 为什么 max_parallel_workers_per_gather != max_parallel_workers

sql - 默认值表达式函数何时/如何绑定(bind)到 search_path?

java - 在我的应用程序中检索地理位置远不如 Google map 应用程序在我的设备上同时显示的准确

r - 在用 R 创建的地理 map 中填充大陆区域

java - MongoDB:查找所有字段和值(_id 除外)都等于给定文档的文档?

node.js - 类型错误 : Cannot read property 'save' of null

php - Laravel + MongoDB + Elasticsearch,Elasticquent的配置问题