小编use*_*996的帖子

120个mongodb系列与单个系列 - 哪一个更有效?

我是mongodb的新手,我的DB Schema设计面临两难选择:

我应该创建一个单独的集合还是将我的数据放入多个集合中(我想可以称之为这些类别).

现在我知道很多这样的问题已被提出,但我认为我的情况有所不同有两个原因:

  • 如果我去了很多收藏品,我将不得不创造大约120个,就是这样.这将不会在未来增长.
  • 我知道我永远不需要查询或插入多个集合.我将始终只查询一个,因为集合X中的文档与存储在其他集合中的任何文档无关.文档可以保存对DB的其他部分的引用(如userId等).

所以我的问题是:120个集合可以提高查询性能吗?在我的情况下,这是一个有用的优化吗?

或者我应该去单一收集+分片?

预计每个集合都会保存数百万份文档.如果只使用一个,它将存储数十亿个文档.

提前致谢!

-------编辑:

谢谢你的答案.

事实上,120个系列只是一个自制限制,它不是真正的最佳:

集合中的数据与Web发布者相关.可能有数百万(任何网站都可以加入).

我想理想的情况是,如果我可以为每个发布者创建一个集合(仅保存他们的数据).但显然,由于mongo的限制,这是不可能的.

所以我提出了一个固定数量的集合的想法,至少以某种方式分发数据.喜欢:集合"A_XX"将为名称以"A"开头的出版商提供XX平台相关数据等.我们只支持其中的一些平台,因此120个集合应该绰绰有余.

在另一个网站上有人建议使用许多数据库而不是许多集合.但这意味着开销,然后我将不得不使用/管理许多不同的连接.

你怎么看待这件事?有更好的解决方案吗?

很抱歉我原来的问题不够具体.

提前致谢

collections sharding mongodb

20
推荐指数
1
解决办法
1万
查看次数

如何在 Ag-Grid 中隐藏排序顺序指示器?

我正在使用 AgGrid 和 ag-grid-angular 15.0.0

我所有的列都是可排序的。Ag-grid 在每个标题中打印一个数字,指示排序顺序。如何隐藏这个?我正在使用suppressMultiSort = true,因为我只想按单列排序。

编辑:

如果只有 1 列可排序,则不会打印数字。但是如果可以排序超过 1 个,agGrid 会在标题中显示这些数字。

此外,一旦我单击任何标题以触发排序,数字就会消失..

任何帮助将不胜感激。

提前致谢!

ag-grid angular

8
推荐指数
1
解决办法
4188
查看次数

如何在 docker 镜像中使用 AWS cli?

我正在开发一些微服务。我使用 docker-compose 进行本地测试,并通过 copilot 将内容部署到 ECS。

其中一项 NodeJS 服务现在需要 AWS CLI。

添加此内容的最佳方法是什么?

Dockerfile

FROM node:lts-buster-slim as base

RUN apt-get update
RUN apt-get install -y --no-install-recommends python build-essential curl unzip

RUN curl --insecure "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
RUN unzip awscliv2.zip
RUN ./aws/install

...

RUN npm install

Run Code Online (Sandbox Code Playgroud)

问题是 AWS CLI 无法通过这种方式找到凭证,因此 NPM 安装失败。如何使凭证可用?我尝试向 docker-compose.yml 添加卷,但没有成功。

我可以以某种方式提供 AWS 配置/凭证作为 ENV 变量吗?我无法在容器中运行 aws configure,因为它需要手动输入。

编辑:

有一些简单的解决方案吗?我基本上只需要 AWS CLI,因为我需要运行aws codeartifact login 才能安装私有 NPM 包。

我确信创建一个任务可以解决这个问题,有没有更简单的方法?我通过 AWS-SDK 完成其他所有工作,并且我已经拥有了相应的凭证。但这一步是NPM安装所必需的,所以我必须使用CLI。

编辑2:

基本上我需要在构建阶段运行它:

aws codeartifact login --tool npm --repository …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-ecs dockerfile

7
推荐指数
1
解决办法
1万
查看次数

EC2错误:无法为此处文档创建临时文件:只读文件系统

看起来我的 Ubuntu 14.04 EC2 将 fs 设置为只读。

cd /var/  (pressing tab for autocomplete)
Run Code Online (Sandbox Code Playgroud)

无法为此处文档创建临时文件:只读文件系统

但我有足够的可用空间,内存也没有满:

Welcome to Ubuntu 14.04.2 LTS (GNU/Linux 3.13.0-48-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

  System information as of Wed Feb  3 14:40:58 UTC 2016

  System load:  0.0                Processes:           126
  Usage of /:   14.9% of 11.67GB   Users logged in:     0
  Memory usage: 19%                IP address for eth0: 172.31.15.38
  Swap usage:   0%
Run Code Online (Sandbox Code Playgroud)

df-嗨:

/dev/xvda1       768K   85K  684K   12% /
none             251K     2  251K    1% /sys/fs/cgroup
udev             249K   387  249K    1% …
Run Code Online (Sandbox Code Playgroud)

filesystems amazon-ec2 ubuntu-14.04

6
推荐指数
1
解决办法
2万
查看次数

MongoDB $lookup 管道:这是否使用索引?

我有一个查询,它利用 $lookup 的管道功能,并且还使用 $expr。嗯,它可以工作,但性能不是很好。它在包含大约 4000 个文档的集合中查找内容,并连接其他 2 个集合(使用 $lookup 块)。尽管每个集合中只有几千个文档,但运行时间大约为 2000 毫秒。

该查询看起来像这样:

            {
                $match: {
                   language: 'str'
                }
            },
            {
                $lookup: {
                    from: 'somecollection',
                    let: { someId: '$someId' },
                    pipeline: [
                        {
                            $match: {
                                $expr: {
                                    $and: [
                                        {
                                            $eq: [
                                                '$_id',
                                                '$$someId'
                                            ]
                                        },
                                        {
                                            $gte: ['$field',value]
                                        },
                                        {
                                            $lte: ['$field2',value]
                                        }
                                       ....
                                       // some more conditions..

                                    ]
                                }
                            }
                        }
                    ]
Run Code Online (Sandbox Code Playgroud)

对此运行解释()仅提供有关第一个 $match 块的信息。但是如何判断管道中的 $expr 是否使用索引呢?

我尝试向管道中使用的所有字段添加索引,并且还尝试创建复合索引,但我无法使其更快。

我怎样才能提高性能?

我的查询的结构:

match (filter by language),
lookup (col1 join)
lookup …
Run Code Online (Sandbox Code Playgroud)

pipeline join aggregate mongodb

6
推荐指数
1
解决办法
4126
查看次数

Mongodb 游标过早地发出“结束”(NodeJS)

我有一个包含 150 000 个项目的集合。我正在使用 cursor.stream() 来迭代它们。

“结束”事件总是过早地被触发,大约 15-20 000 个项目永远不会被流式传输。

没有错误事件或任何其他错误/异常。

游标是这样创建的:

return this.conn.find({},

    {
        timeout: false,
        batchSize: 50,
        maxTimeMS: 0,
        fields: {
            field1: 1,
            field2: 1
        }
    });
Run Code Online (Sandbox Code Playgroud)

我的代码看起来像这样(我删除了几个部分以保持简短,这是一种伪代码)

var cursor = self.db.SomeCollection.getCursor();
cursor.limit(0);
cursor.skip(0);
cursor.maxTimeMS(0);
cursor.batchSize(50);

var stream = cursor.stream();

cursor.count(function(err,cnt) {

    self.logger.info('Processing %d items',cnt);

    var bar = new ProgressBar(':bar :percent complete (:elapseds)', {
        total: cnt,
        width: 100
    });

    stream.on('data',function(item) {

        stream.pause();

        self.db.OtherCollection.findStuff(item.prop, function(err,user) {

            // some processing...

            self.db.OtherCollection.updateStuff(item.ptop,data,function(err,upd) {

                // more processing...

                bar.tick();
                stream.resume();

            });
        });
    }); …
Run Code Online (Sandbox Code Playgroud)

stream mongodb node.js

5
推荐指数
0
解决办法
529
查看次数

如何在本地测试MAS包?

我正在尝试使用 Electron 6.1.9 和 Electron builder 21.2.0 为 Mac App Store 创建一个包。

我使用“3rd Party Mac Developer Application”和“3rd Party Mac Developer Installer”证书签署软件包,并使用正确的配置文件。

看起来工作正常,构建成功。但我无法启动生成的应用程序。它立即崩溃并出现以下错误:

异常类型:EXCCRASH(代码签名无效) 异常代码:0x0000000000000000、0x0000000000000000 异常注释:EXCCORPSE_NOTIFY

终止原因:命名空间 CODESIGNING,代码 0x1

我还尝试创建一个运行 MacOS Catalina 的虚拟机,并在那里安装和运行该应用程序。结果是一样的。

我的问题是如何确保 MAS 包没问题?如何测试这个包?

像 codesign、pkgutil 等工具都打印出预期的输出,签名看起来没问题。但我仍然收到无效签名错误。

顺便说一句,我知道我可以使用 type="development" 进行构建,在这种情况下,应用程序将在本地运行,但这不会是同一个包。我想在发送给 Apple 审核之前测试分发包。

更新:

使用Apple的工具,我发现以下错误:

ERROR ITMS-90277: "Invalid Bundle Identifier. The application bundle contains a tool or framework Electron Helper (GPU) [hu.icell.etcd.pkg/Payload/ETCD Manager.app/Contents/Frameworks/ETCD Manager Helper (GPU).app] using the bundle identifier 'hu.icell.etcd.helper.(GPU)', which is not a valid bundle identifier."
Run Code Online (Sandbox Code Playgroud)

所以不知何故它试图将我的 appid …

mac-app-store electron electron-builder

5
推荐指数
0
解决办法
230
查看次数

在 6502 汇编器中编写子程序的最佳方法?

我是汇编程序新手,所以这是一个简单的问题:

我的自定义子例程更改XYA寄存器。他们操纵这些来产生期望的结果。在例程启动时将这些值推入堆栈并在之前恢复它们是一个好主意吗RTS

我的意思是,这样我就可以编写可以从任何地方调用的例程,而不会弄乱“状态”或影响其他例程。但是这样使用栈可以吗?或者有更好的方法来做到这一点吗?

assembly c64 6502 calling-convention

4
推荐指数
1
解决办法
981
查看次数

Postgres分区?

我的软件每30分钟运行一次cronjob,从Google Analytics/Social网络中提取数据并将结果插入到Postgres数据库中.

数据如下所示:

url text NOT NULL,    
rangeStart timestamp NOT NULL,
rangeEnd timestamp NOT NULL,
createdAt timestamp DEFAULT now() NOT NULL,
...
(various integer columns)
Run Code Online (Sandbox Code Playgroud)

由于一个查询返回10 000多个项目,因此将这些数据存储在单个表中显然不是一个好主意.按此速度,cronjob每天将产生约48万条记录,每月产生约1450万条记录.

我认为解决方案是使用几个表,例如我可以使用特定的表来存储给定月份生成的数据:stats_2015_09,stats_2015_10,stats_2015_11等.

我知道Postgres支持表分区.但是,我对这个概念不熟悉,所以我不确定最好的方法是什么.在这种情况下我是否需要分区,还是应该手动创建这些表?或者也许有更好的解决方案?

稍后将以各种方式查询数据,并且这些查询预计会快速运行.

编辑:

如果我最终得到12-14个表,每个表存储10-20百万行,Postgres应该仍能快速运行select语句,对吧?插入不必非常快.

postgresql database-partitioning

3
推荐指数
1
解决办法
1305
查看次数

如果 Nestjs 控制器方法返回 Promise,它是否必须是异步的?

非常简单的一般问题:

@Controller('something')
class SomeController {
  @Get()
  foobar() {
     return foo() // this returns a promise
  }
}
Run Code Online (Sandbox Code Playgroud)

那么在这种情况下,我是否必须使foobar()控制器方法异步?我的理解是,这是没有必要的。NestJS 将自动解析返回的 Promise。仅当我想进入内部时才需要使方法异步await

它是否正确?

asynchronous controller nestjs

3
推荐指数
1
解决办法
1907
查看次数

WP REST API如何上传精选图片?

我正在使用WP REST API插件V2(http://wp-api.org/).

API可以上传特色图像并生成相关的元数据吗?

我知道我可以上传图片附件(POST/wp-json/wp/v2/media),然后更新相关文章(PUT/wp-json/wp/v2/posts/ID)并使其"featured_image"关键点到附件ID.

但这是正确的方法吗?

是否可以在上传后生成特色图像的不同(已调整大小)版本,还是需要自定义端点?

rest wordpress

2
推荐指数
2
解决办法
9230
查看次数

How to pass any number of arguments to C++ template function?

I have this simple C++ template function. I need to pass any number of arguments of any type to the Method, as shown below. How do I do this?

template <typename T1, typename T2, auto Method>
T1 * wrapObject()
{
    T2 * obj = (*_asposeObj.*Method)(// I would like to pass arguments here);
    ...
}
Run Code Online (Sandbox Code Playgroud)

This is a C++20 project, compiler is g++.

I tried:

template <typename T1, typename T2, auto Method, auto ...Args>
T1 * wrapObject(Args... args)
{
    T2 * …
Run Code Online (Sandbox Code Playgroud)

c++ function-templates variadic-templates

2
推荐指数
1
解决办法
127
查看次数