2016-09-27 77 views
0

我想大GeoJSON的文件加载到我的计划,但我现在遇到了我的开发服务器上的“出记忆”崩溃(是不是我的便携式的问题),与失败所:Nodejs和加载大型GeoJSON文件,用于搜索?

Security context: 0x2a7393fcfb51 <JS Object> 
    1: parse [native json.js:62] [pc=0x25e952e638ef] (this=0x2a7393fc9111 <a JSON with map 0xb4bfd40a0e1>,C=0x3e8116304201 <Very long string[64906954]>,w=0x2a7393f04381 <undefined>) 
    2: arguments adaptor frame: 1->2 
    3: loadGeoJson [/home/myuser/myproject/node/geo-locations.js:26] [pc=0x25e952f451ff] (this=0x362211a62d19 <a GeoLocations with map 0x3e0b88b2b5b1>... 
FATAL ERROR: Committing semi space failed. Allocation failed - process out of memory 
1: node::Abort() [node] 
2: 0x10a08dc [node] 
3: v8::Utils::ReportApiFailure(char const*, char const*) [node] 
4: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [node] 
5: v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [node] 
6: v8::internal::Heap::CollectGarbage(v8::internal::GarbageCollector, char const*, char const*, v8::GCCallbackFlags) [node] 
7: v8::internal::Factory::NewFixedArray(int, v8::internal::PretenureFlag) [node] 
8: v8::internal::JsonParser<false>::ParseJsonArray() [node] 
9: v8::internal::JsonParser<false>::ParseJsonValue() [node] 
10: v8::internal::JsonParser<false>::ParseJsonArray() [node] 
11: v8::internal::JsonParser<false>::ParseJsonValue() [node] 
12: v8::internal::JsonParser<false>::ParseJsonArray() [node] 
13: v8::internal::JsonParser<false>::ParseJsonValue() [node] 
14: v8::internal::JsonParser<false>::ParseJsonObject() [node] 
15: v8::internal::JsonParser<false>::ParseJsonValue() [node] 
16: v8::internal::JsonParser<false>::ParseJsonObject() [node] 
17: v8::internal::JsonParser<false>::ParseJsonValue() [node] 
18: v8::internal::JsonParser<false>::ParseJsonArray() [node] 
19: v8::internal::JsonParser<false>::ParseJsonValue() [node] 
20: v8::internal::JsonParser<false>::ParseJsonObject() [node] 
21: v8::internal::JsonParser<false>::ParseJsonValue() [node] 
22: v8::internal::JsonParser<false>::ParseJson() [node] 
23: v8::internal::JsonParser<false>::Parse(v8::internal::Handle<v8::internal::String>) [node] 
24: v8::internal::Runtime_ParseJson(int, v8::internal::Object**, v8::internal::Isolate*) [node] 
25: 0x25e9525092a7 
Aborted (core dumped) 

的代码被称为是导致此问题如下:

JSON.parse(fs.readFileSync(filepath,"utf-8")) 

我试图打破线一分为二,但因为我已经做到了没有发生碰撞,使其难以调试。与此同时,我想看看是否有更好的方法来处理加载GeoJSON文件,以便能够查看条目?

基本上什么我做的是加载GeoJSON的文件,搜索找到一个点是否是一个多边形内。我已经考虑过简单地把它扔到MongoDB中,但我正在处理的是半瞬态的文件内容。

有没有人有什么建议?

回答

0

您是否尝试过增加节点的最大内存限制?默认值是512 MB。你可以这样做,将其增加到1024 MB(或更多,取决于你的geoJson的大小)。

节点--max岁的空间大小= 1024米的script.js

评论,如果不能解决这个问题,因为有可能其他的解决方案,以及。

+0

这似乎做的工作,虽然我很好奇,你脑子里想的是什么其他的解决方案。 –

+0

不将整个文件加载到内存中是另一种选择。您可以使用节点流将文件块分块读入内存,但这可能无用,具体取决于您如何使用geoJSON文件。 – user2263572