小编Nic*_* S.的帖子

生产代码中的Mongoose索引

每猫鼬文档MongooseJSMongoDB/ Node.js:

当您的应用程序启动时,Mongoose会自动调用ensureIndex架构中的每个已定义索引.虽然很适合开发,但建议在生产中禁用此行为,因为创建索引会对性能产生重大影响.通过将autoIndex架构选项设置为false来禁用该行为.

这似乎指示在部署之前从mongoose中删除自动索引以优化Mongoose,指示Mongo在应用程序启动时转到所有索引,这似乎是有道理的.

在生产代码中处理索引的正确方法是什么?也许外部脚本应该生成索引?或者,ensureIndex如果单个应用程序是集合的唯一读取器/写入器,则可能是不必要的,因为每次DB写入时它都会继续索引?

编辑:为了补充,MongoDB提供了有关如何进行索引的良好文档,但没有为什么何时应该执行显式索引指令.在我看来,编写器应用程序应该在具有现有索引的集合上自动更新索引,这实际上更像是一次性的事情(在应用新索引时完成),在这种情况下,Mongoose 应该是一个正常服务器重启后的无操作.ensureIndexautoIndex

mongoose mongodb node.js

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

在Node.js中防止与数据库相关的竞争条件

概观

我试图了解如何在使用Node.js时使用模型实例时确保同步安全.这里,我在代码示例中使用Mongoose ODM,但问题适用于数据库与Node.js采用的异步事件驱动I/O方法一起使用的任何情况.

请考虑以下代码(使用Mongoose进行MongoDB查询):

片段A.

MyModel.findOne( { _id : <id #1> }, function( err, doc ) {
    MyOtherModel.findOne( { _id : someOtherId }, ( function(err, otherDoc ) {
        if (doc.field1 === otherDoc.otherField) {
            doc.field2 = 0; // assign some new value to a field on the model
        }
        doc.save( function() { console.log( 'success' ); }
    });
});
Run Code Online (Sandbox Code Playgroud)

在应用程序的单独部分中,可以更新MyModel描述的文档.请考虑以下代码:

代码片段B.

MyModel.update( { _id : <id #1> }, { $set : { field1 : someValue }, callback );
Run Code Online (Sandbox Code Playgroud)

在Snippet A中,发出MongoDB查询,并在文档准备好后触发注册的回调.MyModel描述的文档实例保留在内存中(在"doc"对象中).可能会发生以下顺序:

  1. 代码片段A执行 …

mongoose mongodb node.js

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

git临时区域如何存储文件?

我想了解Git在将文件移动到"暂存"状态时实际存储的内容.

请考虑以下顺序:

添加新文件并将其提交到本地存储库:

touch file.txt
git add file.txt
git commit
Run Code Online (Sandbox Code Playgroud)

我对文件进行了更改:

echo text1 > file.txt
git add file.txt
Run Code Online (Sandbox Code Playgroud)

然后我再次编辑该文件,然后再提交它:

echo text2 > file.txt
Run Code Online (Sandbox Code Playgroud)

git状态显示:

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   file.txt
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   file.txt
#
Run Code Online (Sandbox Code Playgroud)

然后我提交文件: …

git

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

在AWS中缩小Auto Scaling组会导致永久警报

我目前正在使用两个扩展策略,这些策略附加到我的自动缩放组:A

  1. 在调用CloudWatch警报时调用的向上扩展策略.此CloudWatch警报使用CPUUtilization指标,并在CPU上触发超过80%.
  2. 另一种是缩小策略,在调用其他CloudWatch警报时调用该策略.此CloudWatch警报使用CPUUtilization指标,并在CPU低于50%时触发.

这种方法的副作用是当我的ASG实例空闲(完全按比例缩小,没有处理发生)时,我的ASG处于警报状态.

有没有办法以不同的方式设置它,以便我的ASG不处于持续警报状态?

以下是我的CloudFormation模板中的一部分警报:

"ScaleUpPolicy" : {
  "Type" : "AWS::AutoScaling::ScalingPolicy",
  "Properties" : {
    "AdjustmentType" : "ChangeInCapacity",
    "AutoScalingGroupName" : { "Ref" : "WebApplicationASG" },
    "Cooldown" : "1",
    "ScalingAdjustment" : "1"
  }
},
"CPUAlarmHigh": {
  "Type": "AWS::CloudWatch::Alarm",
  "Properties": {
    "EvaluationPeriods": "1",
    "Statistic": "Average",
    "Threshold": "80",
    "AlarmDescription": "Alarm if CPU too high or metric disappears indicating instance is down",
    "Period": "60",
    "AlarmActions": [ { "Ref": "ScaleUpPolicy" } ],
    "Namespace": "AWS/EC2",
    "Dimensions": [ {
      "Name": "AutoScalingGroupName",
      "Value": { "Ref": "WebApplicationASG" }
    } …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services autoscaling amazon-cloudwatch

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

MongoDB 索引在重启后是否持久?

参考此处的指南,http://docs.mongodb.org/manual/core/indexes/我无法判断字段的 Mongo 索引是否持久存储。

如果ensureIndex()在使用 的应用程序中调用(并完成)MongoDB,如果出现以下情况会发生什么:

  1. 使用的应用程序MongoDB重新启动。后续调用是否ensureIndex()会导致完全重新索引?
  2. MongoDB服务器重新启动。稍后ensureIndex()来自客户端应用程序的调用会重建吗?
  3. 有多个客户端会话会影响这些吗?我假设根据文档,索引在整个集合中是全局的:"MongoDB defines indexes on a per-collection level."

mongoose mongodb

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

mongoose 的 model.on('index', ...) 应该如何使用?

MongooseJS在查看for的文档时MongoDB/Node.js,似乎可以在对象上指定索引,如下所示:

var MyModelSchema = new Schema({ name: String, index: true });
var MyModel = mongoose.model('MyModel', MyModelSchema);
MyModel.on('index', function()
{
    doStuff();
});
Run Code Online (Sandbox Code Playgroud)

根据文档,Mongoose 将ensureIndex()在启动时调用,除非该"autoIndex"选项在模式上显式设置为 false。一旦完成,'index'事件将在模型上发出,这将触发回调。

我的理解是,这允许模型的用户确保在使用模型之前所有索引都已完成。

我相信我听说过通过 这样做app.configure,尽管我不确定如何做到这一点。也许还有另一种方法可以保证在依赖导出模型的应用程序的其他部分之前完成此索引操作?

这个应该如何正确使用呢?

mongoose mongodb node.js

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

选择时调整单元格大小时NSAutoResizingMaskLayoutConstraint错误

我正在实现一个自定义UITableView,它将垂直展开单个单元格以显示用户点击单元格时的详细信息.

当我在didSelectRowAtIndexPath处理程序中将addConstraint调用到UITableViewCell时,我遇到了一个问题:

Unable to simultaneously satisfy constraints.
...
If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0xa0c9cc0 V:[UITableView:0xc339c00]-(0)-|   (Names: '|':UITableViewCellContentView:0xa0c8910 )>",
    "<NSAutoresizingMaskLayoutConstraint:0xa0b8600 h=--& v=--& V:[UITableViewCellContentView:0xa0c8910(25)]>",
    "<NSLayoutConstraint:0xa0caad0 V:|-(42)-[UITableView:0xc339c00]   (Names: '|':UITableViewCellContentView:0xa0c8910 )>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0xa0c9cc0 V:[UITableView:0xc339c00]-(0)-|   (Names: '|':UITableViewCellContentView:0xa0c8910 )>  
Run Code Online (Sandbox Code Playgroud)

以下是我实施的更多细节:

  1. 当用户选择一个单元格时,在我的子类UITableView中调用didSelectRowAtIndexPath,我在其中更新名为selectedRowIndex的成员.
  2. 同样在didSelectRowAtIndexPath中,我在一个单元格上调用addConstraint(我通过[tableView cellForRowAtIndexPath:indexPath]检索).这是一个垂直约束:"V:| - (42) - [embeddedTableView]",它确保在单元格的详细信息视图中的另一个嵌入表上方有空格.
  3. 在didSelectRowAtIndexPath完成后,调用heightForRowAtIndex.我对heightForRowAtIndex的实现将检查selectedRowIndex值并为所选行返回更大的高度.

在步骤2,发生上述"无法同时满足约束"错误.我相信这是因为didSelectRowAtIndexPath在heightForRowAtIndex之前被调用.我的预感是translatesAutoresizingMaskIntoConstraints设置(在我的实现中是YES)是基于单元格高度的运行时值创建新约束,该值在运行didSelectRowAtIndexPath代码后更新.

是否有推荐的方法来解决此问题?或者是否有另一种方法来执行单元格扩展,这仍然允许我为单元格的内容设置必要的单元格约束?

ios autolayout nslayoutconstraint

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