标签:文献 参考文献 操作 驱动 计数器 mon mongo 情况 报错
1.处理数据的程序或者服务是x86架构的,容易出现内存溢出。
因为x86的进程,最多允许内存4g、在这4g中又有2g是操作系统等、所以当你查询的数据量非常大的时候,非常容易内存溢出。
2.多线程 容易导致内存溢出(溢出原理细节我还不清楚)
我查询mongo数据量,数据按地区分类,我查到A地区有70000条数据,B地区有60000条数据。我要将两地数据导出成excel,A地导出成功、B地导出报错:内存溢出。
为什么会出现这个异常呢?
这是因为在MongoDB中B地数据的字段比A地多很多。MongoDB对于.net的这个版本的驱动的find方法 底层用的是Dictionary 的Add来获取满足条件的数据集合。但是Dictionary是.net中线程不安全的,MongoDB的驱动可能使用了多线程查询数据、把数据插入集合中,由于B地区的数据一行特别长,插入还没结束,线程跑去插另外一条数据去了,这导致集合内部的一个计数器计算错误,记的数少了,但是插入的这个行数是不会变的,导致行数超越了集合边界,于是报内存溢出。
参考文献:https://blog.csdn.net/liweiblog/article/details/52329740
标签:文献 参考文献 操作 驱动 计数器 mon mongo 情况 报错
原文地址:https://www.cnblogs.com/wholeworld/p/10188216.html