结果:
如果您正在对容错的数据集进行操作,或者执行一次性过程,则可以进行验证,将WriteAcknowledge更改为Unacknowledged可以提供帮助.
此外,默认情况下批量操作是IsOrdered,我不知道.将此设置为False实际上会使操作批量执行,否则它将作为一个更新线程运行.
MongoDB 3.0/WiredTiger/C#驱动程序
我有一个147,000,000个文档的集合,其中我每秒钟(希望)大约会执行更新.3000个文件.
以下是更新示例:
"query" : {
"_id" : BinData(0,"UKnZwG54kOpT4q9CVWbf4zvdU223lrE5w/uIzXZcObQiAAAA")
},
"updateobj" : {
"$set" : {
"b" : BinData(0,"D8u1Sk/fDES4IkipZzme7j2qJ4oWjlT3hvLiAilcIhU="),
"s" : true
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个典型的更新,我的要求是以每秒3000的速度插入.
不幸的是,这些花费的时间是原来的两倍,例如最后一次更新是针对1723个文档,并且需要1061ms.
该集合仅在_id上有索引,没有其他索引,并且该集合的平均文档大小为244字节,无上限.
服务器有64GB内存,12个线程.插入性能非常好,收集尺寸较小,比如大约5000万,但是大约有8000万之后真正开始下降.
可能是因为整套不在内存中吗?数据库由RAID0 SSD支持,因此IO性能不应成为瓶颈,如果它应该在一开始就显示出来?
我会相信一些指导,因为我相信MongoDB可以满足我的相当微薄的要求,而不是它所使用的一些应用程序.数据库没有大量的读取率,因此Sharding不会改善问题,尽管可能我错了.
无论哪种方式,当前的插入率都不够好.
更新:这是查询的解释()...
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "Collection",
"indexFilterSet" : false,
"parsedQuery" : {
"_id" : {
"$eq" : { "$binary" : "SxHHwTMEaOmSc9dD4ng/7ILty0Zu0qX38V81osVqWkAAAAAA", "$type" : "00" }
}
},
"winningPlan" : {
"stage" : "IDHACK"
},
"rejectedPlans" : []
},
"executionStats" : …
Run Code Online (Sandbox Code Playgroud) 如果我在实体框架中有三个类.
class Base {}
class Left : Base {}
class Right : Base {}
Run Code Online (Sandbox Code Playgroud)
我打电话给 DBContext.Bases.ToList();
这会将Base
完全键入的所有实例返回到其关联的继承类型中,正如一些人已经注意到的,EF对大型继承结构的性能至少可以说不是很好.我在我的项目中的实际查询是600行,只是为了返回一个实体,需要2秒生成.
如果你告诉它返回哪种类型,它们的查询运行速度要快得多,因为它不必连接整个结构.例如
DBContext.Bases.OfType<Left>.ToList();
or
DBContext.Bases.OfType<Right>.ToList();
Run Code Online (Sandbox Code Playgroud)
但是我现在想只返回基类.不幸做的
DBContext.Bases.OfType<Base>.ToList();
Run Code Online (Sandbox Code Playgroud)
与DBContext.Bases.ToList()相同;
它获得了WHOLE继承结构...... 在查看Base集合时,是否有任何方法(不在EF中创建新类型)只返回类Base?
对不起,我无法登录我的实际帐户...
也许我没有说清楚,我想带回所有对象(包括Base,Left和Right),但我只想返回Base类,即使在数据库中它们是实际的Left和Right类.
OFTYPE是一个很好的建议,但它过滤掉了我的所有实体,因为没有一个是实际的Base类型.但我想只返回Base类型对象中的Base类型值.
有任何想法吗?
我需要从以下传感器构建惯性测量单元(IMU):
我必须整合这些数据,以得出传感器平台的姿态和所涉及的外力(例如,从线性加速度中减去倾斜).
然后,我必须使用这些信息来补充标准的GPS单元,以提供比仅由GPS提供的更一致的测量.
我确实理解这个问题的基本要求:
虽然目前有各种各样的图书馆可供我这样做(http://code.google.com/p/sf9domahrs/)我需要了解所涉及的机制,以便我能够向其他人解释这些技术在我实施解决方案之后.
我一直在寻找以下资源,但我不确定我应该去哪...我需要一些内容涉及传感器融合,过滤,IMU,集成.
我希望在这方面有经验的人可以提供任何建议.
非常感谢.
这听起来很奇怪,我希望我做错了什么,但是我的MongoDB
收藏品正在收集我的收藏中Count
的一个.
我有一个(我相信)359671文件的集合.但是,该count()
命令返回359670个文档.
我正在count()
使用mongo shell 执行命令:
rs0:PRIMARY> db.COLLECTION.count()
359670
Run Code Online (Sandbox Code Playgroud)
这是不正确的.
它没有找到我的收藏中的每一个文件.
如果我提供以下查询来计数,我得到正确的结果:
rs0:PRIMARY> db.COLLECTION.count({_id: {$exists: true}})
359671
Run Code Online (Sandbox Code Playgroud)
我相信这是WiredTiger中的一个错误.据我所知,每个文档都有相同的定义,一个整数的_id字段,范围从0到359670,以及一个BinData字段.我没有旧版存储引擎(或Mongo 2,这可能导致问题)的问题.
这是我做错了吗?我不想使用{_id: {$exists: true}}
查询,因为完成需要100倍的时间.
我为问一个基本问题而道歉,但是我找不到这个错误的原因.
我正在使用Entity Framework来执行存储过程,我传递了四个参数,但是SQL数据库似乎拒绝它们.谁能指出我正确的方向?
我的代码:
ObjectResult<SearchDirectoryItem> resultList = container.ExecuteStoreQuery<SearchDirectoryItem>("SearchDirectoryEntries",
new SqlParameter("@DirectoryId", search.DirectoryId),
new SqlParameter("@Latitude", point.Latitude),
new SqlParameter("@Longitude", point.Longitude),
new SqlParameter("@Range", search.RangeMiles));
Run Code Online (Sandbox Code Playgroud)
哪会产生错误:
过程或函数'SearchDirectoryEntries'需要参数'@DirectoryId',这是未提供的.
生成的SQL是:
exec sp_executesql N'SearchDirectoryEntries',N'@DirectoryId int,@Latitude decimal(7,5),@Longitude decimal(6,5),@Range int',@DirectoryId=3,@Latitude=53.36993,@Longitude=-2.37013,@Range=10
Run Code Online (Sandbox Code Playgroud)
存储过程是:
ALTER PROCEDURE [dbo].[SearchDirectoryEntries]
@DirectoryId int,
@Latitude decimal(18, 6),
@Longitude decimal(18, 6),
@Range int
Run Code Online (Sandbox Code Playgroud)
非常感谢.
我为web.config编写了一个自定义保护配置提供程序.
当我尝试使用它加密我的web.config时,我从aspnet_iisreg收到以下错误
aspnet_regiis.exe -pef appSettings.-prov CustomProvider(这在我的MSBuild中运行)
无法加载文件或程序集"MyCustomProviderNamespace"或其依赖项之一.该系统找不到指定的文件.
在使用Fusion日志检查后,我确认它正在检查GAC和'C:/WINNT/Microsoft.NET/Framework/v2.0.50727/'(aspnet_iisreg的位置).但它无法找到提供者.
我不想将我的组件移动到GAC中,我想将自定义程序集留在我的ApplicationBase中,以便复制到各种服务器,而无需从GAC拉/推.
这是我在web.config中的提供程序配置.
<configProtectedData>
<providers>
<add name="CustomProvider"
type="MyCustomProviderNamespace.MyCustomProviderClass,
MyCustomProviderNamespace" />
</providers>
</configProtectedData>
Run Code Online (Sandbox Code Playgroud)
我希望aspnet_iisreg检查我的ApplicationBase Bin文件夹中的这个程序集.有没有人有任何想法?
我正在使用DllImport从我的C#应用程序访问C++ DLL中的一些函数.
这个代码在我的开发笔记本电脑上工作正常,这是Windows 7 64位,dll本身是32位,所以我运行托管dbit在32位的进程,它运行良好.但是,当我尝试在我的目标计算机上运行完全相同的进程时,Windows 7 64bit Ultimate我得到错误"无效访问内存位置".从过程中.
我不确定问题是什么,我看了网上的大量资源,但没有一个能为我解决.我不明白为什么它在我的开发盒上工作正常,但不在目标上?
dll本身很好,dll附带的示例都可以在我的目标框中正常工作(这是C#应用程序正在执行DllImport).
有没有其他人有这个问题?现在已经打了两天了!
例外: {"Unable to load DLL 'CLEyeMulticam.dll': Invalid access to memory location. (Exception from HRESULT: 0x800703E6)"}
我有一个私人nuget服务器,我试图从中提取包(最终Azure构建代理,但我首先在本地尝试).
我使用2.7 NuGet意味着我不需要.NuGet文件夹(以及.exe和.targets).我的解决方案目录中有一个nuget.config.
我知道nuget.config正在被选中,因为它找到了我的远程存储库,但未使用配置中提供的凭据.
这是我的配置:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<activePackageSource>
<add key="All" value="(Aggregate source)" />
</activePackageSource>
<packageSources>
<add key="https://www.nuget.org/api/v2/" value="https://www.nuget.org/api/v2/" />
<add key="myrepo" value="http://myrepo:81/nuget/myfeed" />
</packageSources>
<disabledPackageSources />
<packageSourceCredentials>
<myrepo>
<add key="Username" value="user" />
<add key="ClearTextPassword" value="pass" />
</myrepo>
</packageSourceCredentials>
</configuration>
Run Code Online (Sandbox Code Playgroud)
什么会导致nuget忽略这些凭据?我已经检查过Fiddler,并且没有发送凭据,服务器响应401(正确):
Error 1 NuGet Package restore failed for project MyProject: The remote server returned an error: (401) Unauthorized.. 0 0
Run Code Online (Sandbox Code Playgroud) 我在Entity Framework中有两个实体,Parent和Child.
父级有一组子实体.
在我的查询中,我想只返回父实体(完全类型的EF类型)以及子实体的Count()(这可以设置为Parent上的属性),但我只想在一次调用数据库,无需编写自定义S-Proc.这可能吗?
基本的,我想把它变成一个单一的查询:
EFContext content = new EFContext();
IQueryable<Parent> parentQuery = context.Parent.Select();
foreach(Parent parent in parentQuery)
{
parent.NoChildItems = parent.Childs.Count();
}
Run Code Online (Sandbox Code Playgroud)
当我在此激活枚举器时,它会调用列表的数据库,并再次为每个Count()查询调用.我每次返回大约100个项目,因此不希望仅针对子项目的数量进行100次单独调用.
谢谢你的帮助.
我开始在我的机器人应用程序中探索使用概率.我的目标是进入完整的SLAM,但我开始使用更简单的卡尔曼滤波器来完成我的工作.
我正在使用扩展卡尔曼滤波器,状态为[X,Y,Theta].我使用控制输入[Distance,Vector],我有一个76个激光范围的数组[Distance,Theta]作为我的测量输入.
我无法知道如何决定在高斯函数中使用的协方差.因为我的测量结果是不确定的(激光在<1米时准确度约为1cm,但在更高的范围内精确度可达5cm)我不知道如何创建"函数"来估计这种情况的概率.我知道这个函数应该用'线性化'来使用,但我不知道该怎么做.
我有理由相信如何决定我的状态Gaussian的函数,我很高兴在这个上使用普通的旧均值= 0,方差= 1.这应该不起作用?我很感激人们理解卡尔曼滤波器的一些帮助,因为我想我可能会遗漏一些东西.
c# ×5
.net ×2
mongodb ×2
asp.net ×1
dllimport ×1
encryption ×1
gyroscope ×1
math ×1
nuget ×1
performance ×1
physics ×1
probability ×1
robotics ×1
security ×1
sensor ×1
sql ×1
web-config ×1
wiredtiger ×1