Windows 8.1 x64
Intel Core i3-2350M
8 GB RAM
$ mongo --version
MongoDB shell version: 2.6.5
Próbowałem również z wersją 2.8.0-rc0 i opcją --storageEngine wiredtiger, ale niestety bez sukcesów.
Polega na zaimportowaniu, do systemów baz danych uruchomionych na swoim komputerze, danych z pliku Train.csv bazy MongoDB i PostgreSQL
Mongo
Format pliku csv do znośnej przez mongo formy:
cat Train.csv | tr "\n" " " | tr "\r" "\n" | head -n 6034196 > correct_train.csv
Import poprawionego pliku csv:
mongoimport -d mydb -c train -type csv -file correct_train.csv --headerline
PostgreSQL
CREATE TABLE train(
id TEXT PRIMARY KEY NOT NULL,
Title TEXT,
Body TEXT,
Tags TEXT
)
copy train(Id,Title,Body,Tags) from 'C:\Train.csv' with delimiter ',' csv header
--
Mongo | PostgreSQL |
---|---|
28 minut | 35 minut |
Zliczenie zaimportowanych rekordów
> db.train.count()
6034195
Czas trwania:
0.224s
Zamienić string zawierający tagi na tablicę napisów z tagami następnie zliczyć wszystkie tagi i wszystkie różne tagi. Napisać program, który to zrobi korzystając z jednego ze sterowników.
Pamięć zapełniała się stopniowo by w końcu dojść do następującego poziomu "zapełnienia":
Przetwarzanie trwało: 58 min.
Przetworzono: 6032934/6034195 rekordów.
Wszystkie różne tagi: 42060.
Wszystkie tagi: 17408685.
Wyszukać w sieci dane zawierające obiekty GeoJSON. Następnie dane zapisać w bazie MongoDB.
JSONy pobrałem ze strony: http://www.poipoint.pl/ jest to lista czarnych punktów na drogach
Import pliku csv:
mongoimport -d mydb -c blackpoints --type csv --file Czarne.csv --headerline
Czas trwania:
0.499s
Przykładowy rekord wygląda następująco:
{
"_id" : ObjectId("5462783c587be495784093ea"),
"#szerokosc" : 16.785888,
"#dlugosc" : 50.958284,
"#typ" : "Czarne punkty",
"#miejscowosc" : "Mirosławice"
}
Za pomocą skryptu zmieniłem je do formatu:
{
"_id" : ObjectId("54627fc9587be49578409447"),
"miejscowosc" : "Pobiednik Wielki",
"loc" : {
"type" : "Point",
"coordinates" : [
20.193543,
50.081929
]
}
}
Czarne punkty między miejscowościami: Gdańsk, Olsztyn, Bydgoszcz:
var obszar = {
"type": "Polygon",
"coordinates": [[
[18.64, 54.34],
[20.47, 53.78],
[18.00, 53.11],
[18.64, 54.34]
]]
}
db.blackpoints.find({loc: {$geoWithin: {$geometry: obszar}}}).toArray()
[
{
"_id" : ObjectId("54627fc9587be49578409461"),
"miejscowosc" : "Łęgowo",
"loc" : {
"type" : "Point",
"coordinates" : [
18.639603,
54.227259
]
}
},
{
"_id" : ObjectId("54627fc9587be49578409463"),
"miejscowosc" : "Miłobądz",
"loc" : {
"type" : "Point",
"coordinates" : [
18.720703,
54.137997
]
}
}
]
Czarne punkty w promieniu 50km od Warszawy:
db.blackpoints.find({ loc: {$near: {$geometry: punkt, $maxDistance: 50000} } }).toArray()
[
{
"_id" : ObjectId("54627fc9587be49578409458"),
"miejscowosc" : "Wólka Radzymińska",
"loc" : {
"type" : "Point",
"coordinates" : [
21.082645,
52.410921
]
}
},
{
"_id" : ObjectId("54627fc9587be49578409477"),
"miejscowosc" : "Nowa Wieś",
"loc" : {
"type" : "Point",
"coordinates" : [
20.551673,
52.201294
]
}
},
{
"_id" : ObjectId("54627fc9587be49578409442"),
"miejscowosc" : "Nowa Wieś",
"loc" : {
"type" : "Point",
"coordinates" : [
20.535043,
52.202243
]
}
},
{
"_id" : ObjectId("54627fc9587be4957840943f"),
"miejscowosc" : "Stara Wieś",
"loc" : {
"type" : "Point",
"coordinates" : [
21.627526,
52.08769
]
}
}
]
Czarne punkty pomiędzy punktem w Łęgowie a Warszawą:
var linia = {
"type": "LineString",
"coordinates": [[18.720703, 54.137997], [21.03, 52.23]]
}
db.blackpoints.find({loc: {$geoIntersects: {$geometry: linia}}}).toArray()
[
{
"_id" : ObjectId("54627fc9587be49578409463"),
"miejscowosc" : "Miłobądz",
"loc" : {
"type" : "Point",
"coordinates" : [
18.720703,
54.137997
]
}
}
]
Czarne punkty w prostokącie między Krakowem i Lublinem:
db.blackpoints.find({
loc: { $geoWithin: {$box: [[ 19.95, 50.05 ], [ 22.55, 51.25 ]] } }
}).toArray()
[
{
"_id" : ObjectId("54627fc9587be49578409447"),
"miejscowosc" : "Pobiednik Wielki",
"loc" : {
"type" : "Point",
"coordinates" : [
20.193543,
50.081929
]
}
},
{
"_id" : ObjectId("54627fc9587be49578409448"),
"miejscowosc" : "Pobiednik Wielki",
"loc" : {
"type" : "Point",
"coordinates" : [
20.208933,
50.083553
]
}
},
{
"_id" : ObjectId("54627fc9587be49578409441"),
"miejscowosc" : "Michałowice",
"loc" : {
"type" : "Point",
"coordinates" : [
19.978632,
50.164962
]
}
},
{
"_id" : ObjectId("54627fc9587be4957840945a"),
"miejscowosc" : "Lublin",
"loc" : {
"type" : "Point",
"coordinates" : [
22.45909,
51.218987
]
}
},
{
"_id" : ObjectId("54627fc9587be4957840947b"),
"miejscowosc" : "Strzeszkowice",
"loc" : {
"type" : "Point",
"coordinates" : [
22.40408,
51.15494
]
}
},
{
"_id" : ObjectId("54627fc9587be4957840947e"),
"miejscowosc" : "Jędrzejów",
"loc" : {
"type" : "Point",
"coordinates" : [
20.29134,
50.62867
]
}
},
{
"_id" : ObjectId("54627fc9587be49578409483"),
"miejscowosc" : "Barcza",
"loc" : {
"type" : "Point",
"coordinates" : [
20.70974,
50.95562
]
}
},
{
"_id" : ObjectId("54627fc9587be49578409484"),
"miejscowosc" : "Gózd",
"loc" : {
"type" : "Point",
"coordinates" : [
20.7621,
50.98183
]
}
}
]
Czarne punkty w figurze między Bydgoszczem i Lublinem z wyłączeniem Warszawy:
db.blackpoints.find({loc: {$geoWithin: {$geometry: obszar}}}).toArray()
[
{
"_id" : ObjectId("54627fc9587be49578409472"),
"miejscowosc" : "Otłoszyn",
"loc" : {
"type" : "Point",
"coordinates" : [
18.716669,
52.913949
]
}
},
{
"_id" : ObjectId("54627fc9587be4957840945e"),
"miejscowosc" : "Otłoczyn",
"loc" : {
"type" : "Point",
"coordinates" : [
18.721196,
52.907316
]
}
},
{
"_id" : ObjectId("54627fc9587be4957840945f"),
"miejscowosc" : "Skępe",
"loc" : {
"type" : "Point",
"coordinates" : [
19.345207,
52.876311
]
}
},
{
"_id" : ObjectId("54627fc9587be4957840943f"),
"miejscowosc" : "Stara Wieś",
"loc" : {
"type" : "Point",
"coordinates" : [
21.627526,
52.08769
]
}
},
{
"_id" : ObjectId("54627fc9587be49578409456"),
"miejscowosc" : "Siemiatycze",
"loc" : {
"type" : "Point",
"coordinates" : [
22.863777,
52.42722
]
}
},
{
"_id" : ObjectId("54627fc9587be49578409455"),
"miejscowosc" : "Łuszczów",
"loc" : {
"type" : "Point",
"coordinates" : [
22.734167,
51.304728
]
}
},
{
"_id" : ObjectId("54627fc9587be4957840945a"),
"miejscowosc" : "Lublin",
"loc" : {
"type" : "Point",
"coordinates" : [
22.45909,
51.218987
]
}
},
{
"_id" : ObjectId("54627fc9587be49578409480"),
"miejscowosc" : "Jastków",
"loc" : {
"type" : "Point",
"coordinates" : [
22.4461,
51.29703
]
}
},
{
"_id" : ObjectId("54627fc9587be49578409481"),
"miejscowosc" : "Garbów",
"loc" : {
"type" : "Point",
"coordinates" : [
22.30439,
51.3623
]
}
},
{
"_id" : ObjectId("54627fc9587be49578409482"),
"miejscowosc" : "Życzyn",
"loc" : {
"type" : "Point",
"coordinates" : [
22.07312,
51.4949
]
}
},
{
"_id" : ObjectId("54627fc9587be4957840947b"),
"miejscowosc" : "Strzeszkowice",
"loc" : {
"type" : "Point",
"coordinates" : [
22.40408,
51.15494
]
}
}
]
Czarne punkty w miejscowościach na literę "M", położone w promieniu 100km od Wrocławia:
var wroc = {
"type": "Point",
"coordinates": [17.00, 51.11],
}
db.blackpoints.find({ loc: {$near: {$geometry: wroc, $maxDistance: 100000} },
miejscowosc: { $regex: 'M.*'}}).toArray()
[
{
"_id" : ObjectId("54627fc9587be4957840944f"),
"miejscowosc" : "Marcinkowice",
"loc" : {
"type" : "Point",
"coordinates" : [
17.20947,
50.99181
]
}
},
{
"_id" : ObjectId("54627fc9587be4957840948e"),
"miejscowosc" : "Marcinkowice",
"loc" : {
"type" : "Point",
"coordinates" : [
17.233743,
50.977669
]
}
},
{
"_id" : ObjectId("54627fc8587be4957840943e"),
"miejscowosc" : "Mirosławice",
"loc" : {
"type" : "Point",
"coordinates" : [
16.785888,
50.958284
]
}
}
]