应用程序在Azure中消耗了大量的API调用

时间:2015-02-23 23:40:33

标签: azure azure-mobile-services

我在这里感到疲惫,悲伤和沮丧,感觉像是一个完全白痴。我很抱歉,如果我的帖子太长而且组合得不是很好,但是我想在这里有一些经验的人请给我一些建议。

我目前正在测试我创建的应用,以便让人们添加活动,搜索活动,评论并获得有关他们注册的活动变化的通知。我已经使用了Azure移动服务,这一切似乎运作良好。这对我来说主要是一个学习应用程序,因为我非常喜欢菜鸟。

现在我们即将推出应用程序,我已经开始查看Azure中的数字了。我现在正在使用免费版本,其中每天16k api电话是免费的(将在发布时转移到定价级别) - 但这些数字看起来完全没有了!

每天有2-3个设备似乎运行600-700个API调用。当然,我确实很难运行测试应用程序,但我想有些用户可能会这样做。

所以 - 3个设备消耗了4%的每日免费通话费用。这意味着33个用户可以填写配额,而第一个付费等级仅为300个用户提供空间。

我在这里读错了吗?我的应用程序不可行吗?我认为,即使是我的诺言,也有可能吸引几千名用户。这是否意味着我必须去顶级?因为我买不起。

问题的堆栈部分:

我将用户登录,我创建表格,然后当他们点击搜索时我会做这样的事情:

                    eventenItemList = await eventenTable.Take (200).Where (item => item.Dateandtimeend >= DateAndTimeIn).
                    Where (item => item.Dateandtime <= DateAndTimeInEnd).
                    Where (item => item.Fylke == fylke).
                    Where (item => item.Pris <= MaksPris).ToListAsync ();

我希望这是一个单独的API调用,但它似乎会运行数十个调用 - 就在那里?怎么可能?

当用户不在应用程序中时,我在Android中运行后台服务,该服务通过用户创建的事件的本地数据库,然后检查数据库是否有任何更改。我这样做:

        var table = db.Table<MyEvents> ();

                    foreach (var e in table) {
                        eventenItemList = await eventenTable.Where (item =>                item.Id == e.EventId).ToListAsync ();

                        if (eventenItemList.Count == 0) {

                        } else {
   //I here notify the user that something new is up - and what it is. Time changed, comments or whatever. 

我猜这是愚蠢的,因为它可能在这里为每个循环调用一个API?但在数字中它似乎只做了2次调用 - 就像我期望的那样。

人们,我在这里可怕的失落。我今晚在应用程序周围随机点击了大约一百次 - 并且累计超过1500次api通话。从那以后我一直在冷汗。任何关于这个api呼叫系统如何工作的建议或信息都将非常感激。

1 个答案:

答案 0 :(得分:4)

我没有一个简单的答案,但不要惊慌!

1)了解您正在进行的API调用。 查看您正在制作的请求。我相信一切都最终是对REST API的调用,因此您可以将查询反向设计为抽象。这将是关键的一步。

2)了解你的抽象。 Linq是各种事物之上的大量抽象。这提供了强大的力量,但也存在精神上过度简化你正在做的事情的成本的危险。您实际制作到您的支持商店有哪些疑问?它是否正确地击中高效键或您是否通过表扫描进行分页? (假设存在这样的事情,我不知道)。这会循环回#1。

3)一旦了解了查询如何破解API调用,您将获得开始解决问题所需的数据。

事实上,您知道您使用的API调用远远超出预期。你知道这个。现在是时候弄清楚如何以及如何优化它。 :)