Performance MongoDB的奇怪插入时间
我需要保存大量的传感器测量数据,我正在MongoDB上做一些基准测试 数据: 这是我正在使用的“模式”:Performance MongoDB的奇怪插入时间,performance,mongodb,mongodb-.net-driver,Performance,Mongodb,Mongodb .net Driver,我需要保存大量的传感器测量数据,我正在MongoDB上做一些基准测试 数据: 这是我正在使用的“模式”: public class BetterConsolidatedTag { public ObjectId Id { get; set; } /// <summary> /// The base time to which the offset values relate. /// </summary> public DateT
public class BetterConsolidatedTag
{
public ObjectId Id { get; set; }
/// <summary>
/// The base time to which the offset values relate.
/// </summary>
public DateTime BaseTime { get; set; }
/// <summary>
/// The name of the data series
/// </summary>
public string Name { get; set; }
/// <summary>
/// Values of the series in this time frame. The values are saved as offsets in milliseconds from the BaseTime.
/// </summary>
[BsonElement]
private SortedDictionary<int, object> OffsetValues { get; set; }
}
公共类BetterConsolidatedTag
{
公共对象Id{get;set;}
///
///偏移值与之相关的基准时间。
///
公共日期时间基准时间{get;set;}
///
///数据系列的名称
///
公共字符串名称{get;set;}
///
///此时间帧中序列的值。这些值以毫秒为单位保存为基准时间的偏移量。
///
[b单一元素]
私有SortedDictionary偏移值{get;set;}
}
其想法是,我不保存每个测量值,而是在一个小时内整合特定传感器的所有测量值。因此,每个文档表示从BaseTime
开始的一小时内特定传感器的所有测量值。
定义了两个索引:BaseTime_1_Name_1和Name_1_BaseTime_1
数据库
MongoDB使用以下硬件在Windows Server 2012 R2标准上运行:
- 处理器:Intel(R)Xeon(R)CPU X5675@3.07GHz,3059 Mhz,6核,12个逻辑处理器
- 内存:96GB
- 磁盘:带RAID 1的300GB本地磁盘(IBM ServeRAID M5015)
- 网络:英特尔82575EB千兆以太网控制器
MulGDB是用C++编写的,所以我猜GC是不可能的。所以现在背景压缩是我最好的猜测。默认情况下, 默认的MunGDB一次执行FSyc,所以一分钟后你会有更慢的插入——这是数据实际上被保存到磁盘的时间点,剩下的时间是S。仅在内存中保存。将其设置为每秒(或每次写入时,如果可能)同步数据图形看起来会有所不同。文件在MongoDB中是预分配的。当第一个数据写入预分配的文件时,下一个数据是预分配的。而且没有后台压缩之类的事情。但是,在Windows服务器上运行MongoDB有点类似于让奥运会级别的短跑运动员穿高跟鞋:文件系统ems比ext4和XFS至少慢25%,操作系统试图节省内存。但我同意它慢一点。它不应该均匀地慢一点吗?这并不是说我在性能上有一个普遍的问题。我的问题是我不理解insert中突然出现峰值的现象,峰值只是越来越高r、 这取决于突发的大小和速度、可用的IOPs、是否需要进行文件访问(这是一个相当复杂的主题)你的日志大小等等。从我所看到的,我想说插入时间更长的百分比是我期望的高斯分布。我在一个紧密的循环中生成模拟数据-360000个样本代表一小时的数据,然后我按传感器名称合并,然后我将所有文档保存在一起惯性导航与制导