最近,我开始了一个项目,使用 Django 后端和托管在 Atlas 平台上的 mongoDB 数据库制作一个 Web 服务器,这样我就不必担心在本地运行它。
我仍处于设置的早期阶段并遇到了此错误:
pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [WinError 10061] No connection could be made because the target machine actively refused it
还可能需要提到的是,我目前没有 Django 应用程序形式的数据库或模型文档,但我怀疑这是问题,因为当我运行时,manage.py migrate我收到上述错误,而不是“没有带标签的应用程序” “ 错误。
我的 settings.py 中的数据库配置当前如下所示:
DATABASES = {
'default': {
'ENGINE': 'djongo',
'NAME': 'house-project',
'HOST': 'mongodb+srv://<my-user-name>:<my-password>@house-project-9g5fo.gcp.mongodb.net/test?retryWrites=true&w=majority'
}
}
Run Code Online (Sandbox Code Playgroud)
我知道常见错误之一是您的密码和用户名中包含特殊字符,我已确保不包含任何特殊字符或使用十六进制字符转义它们。我已确保在 Atlas 端添加我的 IP 和用户。我在网上查了一下现有的答案,但无济于事。我发现的最接近的问题是:How to connect Django ORM to mongo atlas? ,但遗憾的是这个解决方案对我不起作用。
任何帮助都会很好地解决这个问题,如果需要有关我的设置的任何其他信息,请告诉我,我很乐意提供。我还包含了一个堆栈跟踪,以防它与下面相关。
Traceback (most recent call last):
File "manage.py", line 20, in <module>
main()
File "manage.py", line …Run Code Online (Sandbox Code Playgroud) 我无法理解与从 Mongo 数据库集合中的磁盘读取数据相关的瓶颈所在。我知道索引是优化查询的重要因素,但假设我们有一个没有索引的集合,并且我正在一个包含 2500 万条记录、大小约为 50Gb 的集合中运行一个简单的查询:
db.customers.find({ first_name: "xyz" })
Run Code Online (Sandbox Code Playgroud)
当然,这必须运行 a COLLSCAN,所以它非常慢(除非它缓存在内存中)。但在我们的例子中,有多慢是很重要的。运行一些测试表明,我运行此查询的计算机并未与我的可用 IOPS 挂钩。在最大读取 IOPS 约为10K 的计算机上,这个简单的查询被限制在1.2K左右。注意CPUiowait

查询显然受到磁盘的限制,但它没有充分利用机器上可用的潜力。有趣的是,当我创建另一个数据库连接并异步运行两个查询时,IOPS 负载增加了 2 倍。似乎每个查询一次只能扫描磁盘上的这么多数据。运行这些没有索引的查询时,是什么阻碍了它?
从长远来看,我认为在尝试对大量不同数据进行复杂搜索时,将 Elasticsearch 引擎耦合起来会有所帮助,但我真的很好奇为什么在这种情况下我们不能垂直扩展。
我正在尝试将 Mongodb Atlas 集群连接到 Studio 3t。
我从“连接到集群”中的 Mongodb 帐户复制了 mongodb+srv://:@cluster0-ohzuo.mongodb.net/test
在 Studio 3t 中,我转到连接管理器 > 新连接 > 导入 URI 并粘贴上面的字符串。
我收到以下错误:无法导入 URI。无法查找主机 cluster0-ohzuo.mongodb.net 的 TXT 记录
我已经构建了一个 Terraform 配置,用于部署 MongoDB atlas 云集群,并使用我的 AWS 账户设置 VPC 对等点。terraform 配置将凭证存储在 AWS Secrets Manager 中。不幸的是,我的 Lambda 无法访问 Secrets Manager API 端点或 Atlas 上托管的 MongoDB 集群。我读到我需要在我的 VPC 上设置 NAT 网关才能访问公共互联网。我不是网络专业人士,我尝试添加一堆不同的配置但无济于事。请帮忙:
理想情况下,我想尽可能地锁定与外部互联网的连接,但如果这不是一个选择,我可以接受任何可行的实现。
这是我的 Terraform 配置
variable "admin_profile" {
type = string
default = "superadmin"
}
variable "region" {
type …Run Code Online (Sandbox Code Playgroud) amazon-vpc aws-lambda mongodb-atlas terraform-provider-aws aws-secrets-manager
我目前正在调查 Atlas 集群中的 mongo 事件。我试图弄清楚为什么它决定升级一段时间。我知道内存周围发生了一些事情,所以我一直在查看Atlas 中的系统内存指标。在图表中添加了一些行,描述为DISPLAY TIMELINE ANNOTATIONS。
在我的“事件”发生时,我可以看到其中一条线。问题是似乎没有什么可以解释这些线代表什么?查看mongo Atlas 文档,它简单地指出:
指示 Ops Manager 显示或隐藏图表注释。图表注释由彩色垂直线组成,指示服务器事件,例如服务器重新启动或成员状态转换。
那么“服务器事件”到底是什么?我如何找到这些以及各种颜色的含义是什么?
当我控制台记录 const products 变量时,我得到了产品,但我在将数据插入 mongodb 数据库时遇到问题,并且它说 mongoClient 未连接。
const express = require("express");
const cors = require("cors");
const { MongoClient } = require("mongodb");
require("dotenv").config();
const app = express();
app.use(cors());
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
const uri = `mongodb+srv://${process.env.DB_USER}:${process.env.DB_PASSWORD}@cluster0.lgrhg.mongodb.net/${process.env.DB_NAME}?retryWrites=true&w=majority`;
const client = new MongoClient(uri, {
useNewUrlParser: true,
useUnifiedTopology: true,
});
client.connect((err) => {
const productsCollection = client
.db(`${process.env.DB_NAME}`)
.collection(`${process.env.DB_COLLECTION}`);
console.log("database connected")
app.post("/addProduct", (req, res) => {
const products = req.body;
productsCollection.insertMany(products).then((result) => {
console.log(result.insertedCount);
res.send(result.insertedCount);
});
});
client.close();
});
app.listen(4000);
Run Code Online (Sandbox Code Playgroud)
之后我在控制台中得到了这个:
database …Run Code Online (Sandbox Code Playgroud) 我计划为 iOS 和 Android 开发一个跨平台应用程序,并希望通过 Realm Sync 同步数据。Realm Sync 是无服务器的。让我们假设以下情况:用户只有一台设备,使用应用程序,保存数据,然后设备出现故障。那么该用户将无法恢复其数据,因为 Realm Sync 只是同步而不是备份,对吧?但是在Realm框架下如何实现同步和备份呢?MongoDB Atlas 扮演什么角色?
提前谢谢了!
注:我是一名本科生。
我一直在使用该选项,方法是选择IP白名单组中的“允许从任何地方访问”按钮,从而允许所有人连接到我的图集群集。有没有一种方法可以只添加我的本地主机IP地址。我尝试这样做,但出现以下错误:
/me/node_modules/mongodb/lib/replset.js:364
process.nextTick(function() { throw err; })
^
MongoError: connection 4 to cluster0blbla.net:27017 closed
Run Code Online (Sandbox Code Playgroud)
有人知道在不向所有人开放安全性的情况下添加localhost连接的方法吗?
我正在使用Python 3.7和Flask 1.0.2
我将我的应用程序插入了mongoDB Atlas,在本地一切正常
客户端= pymongo.MongoClient(连接器)
连接器是Atlas给我的标准连接字符串
connector = "mongodb://xxx:<PASSWORD>@xxcluster-shard-00-00-y0phk.gcp.mongodb.net:27017,xxcluster-shard-00-01-y0phk.gcp.mongodb.net:27017,xxxcluster-shard-00-02-y0phk.gcp.mongodb.net:27017/test?ssl=true&replicaSet=xxxCluster-shard-0&authSource=admin&retryWrites=true"
Run Code Online (Sandbox Code Playgroud)
当我将应用程序部署到Google App Engine标准Python3运行时环境时,它不起作用。有人对这个问题有想法吗?
Appengine错误:
pymongo.errors.ServerSelectionTimeoutError:连接已关闭,连接已关闭,连接已关闭“
假设我想在 GCP/AWS/Digitalocean 上托管我的电子商务网站。我使用 MongoDB 作为数据库。那么哪个会更好呢?
在远程机器上安装 mongodb (GCP/AWS/Digitalocean)
或者
使用 MongoDB Atlas 部署、管理数据库您能说说这两种方法的优缺点以及在什么情况下我应该使用这些方法吗?
deployment mongodb amazon-web-services google-cloud-platform mongodb-atlas
mongodb-atlas ×10
mongodb ×9
python ×2
amazon-vpc ×1
aws-lambda ×1
deployment ×1
django ×1
djongo ×1
mongoid ×1
node.js ×1
performance ×1
pymongo ×1
realm ×1
studio3t ×1
uri ×1