应用在 Azure 中消耗了大量 API 次调用
App consumes an extreme amount of API calls in Azure
我在这里感到疲倦、悲伤和沮丧,感觉自己像个彻头彻尾的白痴。如果我的 post 太长并且不能很好地组合在一起,我感到非常抱歉,但我希望有经验的人给我一些建议。
我目前正在测试我创建的一个应用程序,该应用程序允许人们添加事件、搜索事件、发表评论并在他们注册的事件发生变化时收到通知。为此,我使用了 Azure 移动服务,一切似乎都运行良好。这对我来说主要是一个学习应用程序,因为我是一个菜鸟。
现在我们即将推出该应用程序,我已开始查看 Azure 中的数字。我现在使用的是免费版本,每天有 16k api 次通话是免费的(将在发布时转移到定价层)——但这里的数字看起来完全不合时宜!
每天似乎有 2-3 台设备 运行 发出 600-700 API 次呼叫。当然,我 运行 努力测试应用程序,但我猜有些用户可能会这样做。
因此 - 每日免费通话的 4% 被 3 台设备消耗。这意味着 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 个电话——就像我期望的那样。
伙计们,我在这里迷路了。今晚我 运行 在该应用程序周围点击了大约一百次 运行dom - 并获得了 1500 多个 api 调用。从那以后我一直在冒冷汗。非常感谢有关此 api 调用系统如何工作的任何建议或信息。
我没有简单的答案给你,但不要惊慌!
1) 了解您正在拨打的 API 电话。 查看您提出的要求。我相信一切最终都是对 REST API 的调用,因此您可以将查询反向工程为您的抽象。这将是关键的一步。
2) 理解你的抽象概念。 Linq 是对各种事物之上的巨大抽象。这提供了强大的力量,但也有在精神上过度简化你正在做的事情的成本的危险。您实际上 对您的后备存储进行了哪些查询?它是否正确地击中了高效键,或者您正在通过 table 扫描进行分页? (假设存在这样的事情,我不知道)。这循环回到#1.
3) 了解您的查询如何影响 API 调用后,您将获得开始解决问题所需的数据。
事实上,您知道您使用的 API 电话比您预期的要多得多。你知道这个。现在是时候弄清楚如何以及可以对其进行优化的时间了。 :)
我在这里感到疲倦、悲伤和沮丧,感觉自己像个彻头彻尾的白痴。如果我的 post 太长并且不能很好地组合在一起,我感到非常抱歉,但我希望有经验的人给我一些建议。
我目前正在测试我创建的一个应用程序,该应用程序允许人们添加事件、搜索事件、发表评论并在他们注册的事件发生变化时收到通知。为此,我使用了 Azure 移动服务,一切似乎都运行良好。这对我来说主要是一个学习应用程序,因为我是一个菜鸟。
现在我们即将推出该应用程序,我已开始查看 Azure 中的数字。我现在使用的是免费版本,每天有 16k api 次通话是免费的(将在发布时转移到定价层)——但这里的数字看起来完全不合时宜!
每天似乎有 2-3 台设备 运行 发出 600-700 API 次呼叫。当然,我 运行 努力测试应用程序,但我猜有些用户可能会这样做。
因此 - 每日免费通话的 4% 被 3 台设备消耗。这意味着 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 个电话——就像我期望的那样。
伙计们,我在这里迷路了。今晚我 运行 在该应用程序周围点击了大约一百次 运行dom - 并获得了 1500 多个 api 调用。从那以后我一直在冒冷汗。非常感谢有关此 api 调用系统如何工作的任何建议或信息。
我没有简单的答案给你,但不要惊慌!
1) 了解您正在拨打的 API 电话。 查看您提出的要求。我相信一切最终都是对 REST API 的调用,因此您可以将查询反向工程为您的抽象。这将是关键的一步。
2) 理解你的抽象概念。 Linq 是对各种事物之上的巨大抽象。这提供了强大的力量,但也有在精神上过度简化你正在做的事情的成本的危险。您实际上 对您的后备存储进行了哪些查询?它是否正确地击中了高效键,或者您正在通过 table 扫描进行分页? (假设存在这样的事情,我不知道)。这循环回到#1.
3) 了解您的查询如何影响 API 调用后,您将获得开始解决问题所需的数据。
事实上,您知道您使用的 API 电话比您预期的要多得多。你知道这个。现在是时候弄清楚如何以及可以对其进行优化的时间了。 :)