2

我想要一个带视图计数器的指南部分。目前我担心性能。我想实时拥有它,所以如果有人查看该页面,我想增加计数器。

我担心是因为,如果我每天有 1000000 次观看会怎样。所以我必须打我的数据库 1000000 次,以增加计数器。(仅在一个指南上!)

我在计算性能影响时遇到问题。这是更新整数的大性能损失还是小性能损失?

我的解决方法是缓存视图并仅在每个 x 视图中提交它们。这会将 db 命中减少 x 倍。(例如 x=100)

我目前正在使用 mongohq.com,似乎他们有一个统一的定价模式,所以我只为存储付费,而不是为读/写付费。

我问是因为我不想滥用他们的定价模式。

编辑:

这是我增加观看次数的代码。

public static void increaseViews(String title) throws UnknownHostException,
            MongoException, DbAuthException {
        Datastore ds = DatabaseConnect.getInstance().getDatastore();
        Query<UserGuides> q = ds.createQuery(UserGuides.class).field("title")
                .equal(title);
        UpdateOperations<UserGuides> ops = ds.createUpdateOperations(
                UserGuides.class).inc("views");
        ds.update(q, ops);
    }
4

1 回答 1

4

免责声明:我是 MongoHQ 的创始人

使用 $inc 运算符来执行此操作对性能造成的影响很小。MongoDB 有一个很好的方法来做到这一点。

例如,您的查询可能如下所示:

db.pages.update({page: "index"}, {$inc: {hits: 1}})

Mongo 可以非常快速地处理这些问题,并且非常适合您正在做的事情。如果您到达您滥用计划的地方,我们会礼貌地让您知道;)

于 2012-08-17T13:57:58.137 回答