小编Jam*_*mes的帖子

如何提高MongoDB插入性能

结果:

如果您正在对容错的数据集进行操作,或者执行一次性过程,则可以进行验证,将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)

c# performance mongodb mongodb-.net-driver

22
推荐指数
1
解决办法
8433
查看次数

仅从Entity Framework中检索基类

如果我在实体框架中有三个类.

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类型值.

有任何想法吗?

c# linq-to-entities entity-framework entity-framework-4

15
推荐指数
2
解决办法
5619
查看次数

学习传感器融合的最佳书籍,特别是有关IMU和GPS集成的书籍

我需要从以下传感器构建惯性测量单元(IMU):

  • 加速度计
  • 陀螺仪
  • 磁力仪

我必须整合这些数据,以得出传感器平台的姿态和所涉及的外力(例如,从线性加速度中减去倾斜).

然后,我必须使用这些信息来补充标准的GPS单元,以提供比仅由GPS提供的更一致的测量.

我确实理解这个问题的基本要求:

  • 集成传感器.(取消噪音,减去加速度).
  • 消除噪音.(卡尔曼滤波器)
  • 将IMU测量集成到GPS中.

虽然目前有各种各样的图书馆可供我这样做(http://code.google.com/p/sf9domahrs/)我需要了解所涉及的机制,以便我能够向其他人解释这些技术在我实施解决方案之后.

我一直在寻找以下资源,但我不确定我应该去哪...我需要一些内容涉及传感器融合,过滤,IMU,集成.

多传感器,融合,一体化,智能化的系统

定位的系统,惯性导航集成

机电一体化,智能化的系统 - 越野车数据

自主飞行机器人,无人驾驶汽车

我希望在这方面有经验的人可以提供任何建议.

非常感谢.

physics sensor accelerometer gyroscope kalman-filter

12
推荐指数
1
解决办法
8752
查看次数

MongoDB返回的计数不正确(WiredTiger)

这听起来很奇怪,我希望我做错了什么,但是我的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倍的时间.

mongodb wiredtiger

11
推荐指数
2
解决办法
3535
查看次数

EntityFramework过程或函数''期望参数'',未提供

我为问一个基本问题而道歉,但是我找不到这个错误的原因.

我正在使用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)

非常感谢.

c# sql entity-framework

10
推荐指数
1
解决办法
7276
查看次数

我可以使用自定义保护提供程序加密web.config,该提供程序的程序集不在GAC中吗?

我为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文件夹中的这个程序集.有没有人有任何想法?

.net asp.net security encryption web-config

8
推荐指数
1
解决办法
1443
查看次数

Win 7 DllImport C#奇怪的错误,无法访问内存位置?

我正在使用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)"}

c# dllimport

8
推荐指数
1
解决办法
7786
查看次数

NuGet和VS2013忽略nuget.config中的packageSourceCredentials

我有一个私人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)

visual-studio nuget

7
推荐指数
1
解决办法
1399
查看次数

如何在单个实体框架查询中返回许多子集合Count()

我在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次单独调用.

谢谢你的帮助.

.net c# linq-to-entities entity-framework

5
推荐指数
1
解决办法
4038
查看次数

确定卡尔曼滤波器矩阵的协方差

我开始在我的机器人应用程序中探索使用概率.我的目标是进入完整的SLAM,但我开始使用更简单的卡尔曼滤波器来完成我的工作.

我正在使用扩展卡尔曼滤波器,状态为[X,Y,Theta].我使用控制输入[Distance,Vector],我有一个76个激光范围的数组[Distance,Theta]作为我的测量输入.

我无法知道如何决定在高斯函数中使用的协方差.因为我的测量结果是不确定的(激光在<1米时准确度约为1cm,但在更高的范围内精确度可达5cm)我不知道如何创建"函数"来估计这种情况的概率.我知道这个函数应该用'线性化'来使用,但我不知道该怎么做.

我有理由相信如何决定我的状态Gaussian的函数,我很高兴在这个上使用普通的旧均值= 0,方差= 1.这应该不起作用?我很感激人们理解卡尔曼滤波器的一些帮助,因为我想我可能会遗漏一些东西.

math robotics probability

5
推荐指数
1
解决办法
437
查看次数