想象一下社交网络应用程序.用户关注其他用户和用户拍照.照片上有其他用户的标签.
我正在尝试为该应用程序获得有效的Cosmos数据库实现.我提供了SQL Server版本以及基准测试.
这是它的表格版本:
这是Gremlin查询:
g.V('c39f435b-350e-4d08-a7b6-dfcadbe4e9c5')
.out('follows').as('name')
.out('took').order(local).by('postedAt', decr).as('id', 'postedAt')
.select('id', 'name', 'postedAt').by(id).by('name').by('postedAt')
.limit(10)
Run Code Online (Sandbox Code Playgroud)
这是等效的SQL查询(实际上是linq):
Follows
.Where(f => f.FollowerId == "c39f435b-350e-4d08-a7b6-dfcadbe4e9c5")
.Select(f => f.Followees)
.SelectMany(f => f.Photos)
.OrderByDescending(f => f.PostedAt)
.Select(f => new { f.User.Name, f.Id, f.PostedAt})
.Take(10)
Run Code Online (Sandbox Code Playgroud)
该用户跟随136个用户,他们共同拍摄了257张照片.
SQL Server和Cosmos db都位于West Europe Azure位置.我在法国.我在Linpad上做了一些测试.
如何使用cosmos db更快更便宜地获取Feed?
注意:为了让RU充电,我正在使用Microsoft.Azure.Graph.但我也可以使用Gremlin.Net并得到类似的结果.
使用 .Net Native 工具链在发布模式下构建 UWP 时,出现以下错误:
\n\nError : ILT0005: nutc_driver.exe [\xe2\x80\xa6] returned exit code -1073741819
没有任何其他错误消息,因此我对尝试解决该问题感到无能为力。\n我如何收集有关该问题的信息?\n它可能是什么以及如何验证?
\n\n注释:\n
Microsoft.NETCore.UniversalWindowsPlatform版本为 6.2.8<Use64BitCompiler>true</Use64BitCompiler>构建代理有 14Gb RAM在ApiController的请求中,我正在跟踪等待打开Sql连接的持续时间.
await t.TrackDependencyAsync(async() => { await sqlConnection.OpenAsync(); return true; }, "WaitingSqlConnection");
Run Code Online (Sandbox Code Playgroud)
如果我的请求至少被调用了5分钟,那么任何新的呼叫都会看到持续时间OpenAsync很长(约3秒)而不是立即.
我想了解消除这种疯狂缓慢的原因.
UPDATE
我创建了一个端点只是为了打开SqlConnection.如果我等待超过5分钟然后调用该OpenConnection端点然后再调用任何其他请求,OpenConnection将产生上述等待成本,但请求不会.
因此,我计划在Azure上运行每分钟运行并调用OpenConnection端点.但是,当我从我的http客户端发出请求时,我会产生等待时间.好像打开了SqlConnection以某种方式链接到http客户端IP ...
此外,5分钟的窗口是典型的DNS TTL ...但是数据库端点的DNS查找的3秒太长.不可能.
更新2
在htt客户端级别观察到的时间似乎是等待连接以及其他一些延迟(dns查找?)的结果.
这是一个总结我观察到的内容的表:
更新3
根据Fiddler,我表中第3行和第4行的区别在于TCP/IP Connect和HTTPS握手所花费的时间.我们不要只关注那个帖子,而只关注等待SqlConnection开放的时间.
更新4
实际上我认为两个等待时间都有相同的原因.
服务器需要"保持"其与数据库的连接,并且客户端需要"保持"其与服务器的连接.
更新5
我每隔4分钟就有一份工作要打开,SqlConnection但有一段时间它会产生等待成本.所以我认为不活动时间是4分钟而不是5分钟(因此我更新了这个帖子标题).
所以我更新了我的预定工作,每分钟运行一次.然后我意识到它仍然会产生等待成本,但每30分钟定期(因此我更新了这个帖子标题).
这两次奇怪地与Azure负载均衡器空闲超时相关.
load-balancing sqlconnection keep-alive asp.net-web-api asp.net-apicontroller
在我学习如何使用Cosmos DB的图形时,我发现了两个Microsoft教程:
虽然我使用相同的查询,但它的执行不同.
使用Gremlin.Net,它立即执行.我经常(我会说70%的时间)得到一个RequestRateTooLargeException.如果我理解正确,这意味着我一直达到我选择的400RU/s限制.但是,当查询进入低谷时,它的速度是Microsoft.Azure.Graph解决方案的两倍.
实际上,使用Micorosft.Azure.Graph,我必须调用ExecuteNextAsync一个循环,一次返回一个结果.
所以问题是:
1°)我应该使用哪种方法来获得更好的性能?
2°)我怎么知道我的查询的RU所以我可以微调它?
3°)是否可以提高现有集合的吞吐量?
更新
问题3,我发现在我的数据库的"数据资源管理器"刀片中,我的图表有一个"Scale&Settings",我可以更新吞吐量.
Update2
问题2,我们无法在使用第一种方法(Gremlin.Net)时收取RU,但Microsoft.Graph方法ExecuteNextAsync返回FeedResponse带有字段的a RequestCharge.
尝试编译使用具有多个目标(netstandard2.0和xamarin.iOS)的C#7元组的代码时,出现以下错误:
预定义类型'System.ValueTuple`2'在多个引用的程序集中声明
我想在 Angular 的 Kendo UI 网格中显示超链接。有时候,最简单的事情却是最难做的……
这是我的专栏:
<kendo-grid-column field="number" title="Number">
<ng-template kendoGridCellTemplate let-dataItem let-rowIndex="rowIndex">
<a href='{{azureStorageBaseUrl}}/invoices/{{dataItem.number}}.pdf' target="_blank">{{dataItem.number}}</a>
</ng-template>
</kendo-grid-column>
Run Code Online (Sandbox Code Playgroud)
我希望“数字”为蓝色并作为常规超链接带下划线,但它只是黑色且不带下划线。
我正在尝试在部署我的 apk 之前对其进行签名。这是 yaml 片段:
- task: AndroidSigning@2
displayName: 'Signing'
inputs:
apkFiles: 'Platforms/MyApp.Android/bin/Release/*.apk'
jarsign: true
jarsignerKeystoreFile: 'mykey.keystore'
jarsignerKeystorePassword: '$(myKeyPassword)'
jarsignerKeystoreAlias: "mykey"
jarsignerKeyPassword: '$(myKeyPassword)'
zipalign: true
Run Code Online (Sandbox Code Playgroud)
问题是,虽然该文件mykey.keystore位于解决方案的根目录(签入源代码管理),但我收到以下 yaml 验证错误:
Android 阶段:步骤输入 jarsignerKeystoreFile 引用无法找到的安全文件 mykey.keystore。安全文件不存在或未经授权使用。
在Windows桌面上运行时,如何使用Xamarin表单刷新列表?看来我们无法提神。Tks。
弗朗索瓦
在ConfigureServices我内心
services.AddDbContext<MyContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
Run Code Online (Sandbox Code Playgroud)
以及
services.AddSingleton<IMyModel>(s =>
{
var dbContext = s.GetService<MyContext>();
var lastItem= dbContext.Items.LastOrDefault();
return new MyModel(lastItem);
});
Run Code Online (Sandbox Code Playgroud)
但s.GetService<MyContext>()抛出一个错误:
无法从根提供程序解析作用域服务"MyContext".
我怎样才能做到这一点?我不希望注入MyDbContext的MyModel构造器,因为它是应该没有理由知道一个图书馆Entity Framework.
如何在azure应用程序服务的应用程序设置中定义环境变量以覆盖诸如以下的列表?
"reportsSettings": {
"emails": [
"a@gmail.com",
"b@gmail.com",
"c@gmail.com"
]
}
Run Code Online (Sandbox Code Playgroud)
ps:我知道我可以将列表转换成带有分隔符的字符串,我的代码将像这样分隔
"reportsSettings": {
"emails": "a@gmail.com",b@gmail.com,c@gmail.com"
}
Run Code Online (Sandbox Code Playgroud)
然后使用这样定义的环境变量:key => reportsSettings:emailsvalue =>a@gmail.com",b@gmail.com,c@gmail.com
但我试图看到我可以将json保留为列表。
我迷上了流量管理器设置和自定义域名。
首先,我在2个区域(westeuropeapp.azurewebsites.net和brazilapp.azurewebsites.net)有两个移动应用程序作为Traffic Manager的端点(trafficmanager.trafficmanager.net)。它正在工作。
然后,我想使用带有子域的自定义域名:westeurope.mydomain.com,brazil.mydomain.com和trafficmanager.mydomain.com。因此,我遵循了Azure文档的说明,并为我的子域创建了CNAME,以指向两个移动应用程序和流量管理器。然后,我将westeurope.mydomain.com(resp。brazil.mydomain.com)添加为我的西欧移动应用程序(resp。brazil移动应用程序)的主机名。
但是,当我导航到trafficmanager.mydomain.com时,我得到了404。
我用Dig检查了DNS解析,可以看到trafficmanager.mydomain.com的cname到trafficmanager.trafficmanager.net的cname到westeuropeapp.azurewebsites.net的IP名称解析为ip xxxx。
看起来不错
如果我在浏览器中输入该ip,则得到404。但是,如果我输入westeuropeapp.azurewebsites.net,则我的应用程序将运行。我还在Dig中检查了westeuropeapp.azurewebsites.net,它解析为与上述相同的ip。
我想念什么?(我什至不谈论SSL,下一篇文章。)
我在 ASP.NET Core 中有一个服务,我向其中注入了我的 Entity Framework Core 上下文,该上下文用于定义我的服务将需要的私有函数。该 func 是关于调用存储过程。
对该 func 的第一次调用系统地导致错误
ConnectionString 属性尚未初始化。
但是,后续调用没问题。
这是服务类构造函数:
private readonly Func<Task<long>> _myFunc;
public MyService(MyContext context) => _myFunc= async () =>
{
using (var connection = context.Database.GetDbConnection())
{
await connection.OpenAsync();
using (var command = connection.CreateCommand())
{
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "sp_MyStoredProcedure";
command.Parameters.Add(new SqlParameter("@AParameter", SqlDbType.Int) { Value = 1 });
return (long)await command.ExecuteScalarAsync();
}
}
};
Run Code Online (Sandbox Code Playgroud)
这是stacktrace:
System.InvalidOperationException: ConnectionString 属性尚未初始化。
在 System.Data.SqlClient.SqlConnection.PermissionDemand()
在 System.Data.SqlClient.SqlConnectionFactory.PermissionDemand(DbConnection outerConnection)
在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, …
关于为 UWP 设置 Azure Pipelines 的文档没有说明如何对包进行签名。它确实说证书文件应该位于存储库中,但没有解释如何使用该证书对包进行签名。
所以我的问题是如何在 Azure Pipelines 上签署 UWP 包?我应该创建一个 powershell 脚本来运行吗SignTool?
asp.net-core ×3
azure ×3
c# ×2
gremlin ×2
uwp ×2
.net ×1
.net-native ×1
c#-7.0 ×1
certificate ×1
dns ×1
keep-alive ×1
sql-server ×1
xamarin ×1
yaml ×1