Этот пример показывает, как импортировать большой набор полетных данных из набора MongoDB® в рабочую область MATLAB® с помощью интерфейса Database Toolbox™ для MongoDB. Чтобы избежать проблем из памяти с кучей Java® при получении многих документов, используйте цикл, чтобы импортировать большие данные в пакетах.
Чтобы запустить этот пример, необходимо сначала установить интерфейс Database Toolbox для MongoDB. Для получения дополнительной информации смотрите Интерфейс Database Toolbox для Установки MongoDB.
Создайте связь MongoDB с базой данных mongotest
. Здесь, сервер базы данных dbtb01
размещает эту базу данных с помощью номера порта 27017
.
server = "dbtb01"; port = 27017; dbname = "mongotest"; conn = mongo(server,port,dbname)
conn = mongo with properties: Database: 'mongotest' UserName: '' Server: {'dbtb01'} Port: 27017 CollectionNames: {'airlinesmall', 'employee', 'largedata' ... and 3 more} TotalDocuments: 23485919
conn
является объектом mongo
, который содержит связь MongoDB. Свойства объектов содержат информацию о связи и базе данных.
Именем базы данных является mongotest
.
Имя пользователя является пробелом.
Сервером базы данных является dbtb01
.
Номером порта является 27017
.
Эта база данных содержит шесть наборов документа. Первыми тремя именами набора является airlinesmall
, employee
и largedata
.
Эта база данных содержит 23 485 919 документов.
Проверьте связь MongoDB.
isopen(conn)
ans = logical 1
Соединение с базой данных успешно, потому что функция isopen
возвращает 1
. В противном случае соединение с базой данных закрывается.
Найдите общее количество документов totaldocs
в наборе airlinesmall
в течение лет 1997 - 2010. Используйте запрос MongoDB, чтобы фильтровать полетные данные в течение заданных лет.
collection = "airlinesmall"; mongoquery = '{"Year":{$gte:1997,$lte:2010}}'; totaldocs = count(conn,collection,'Query',mongoquery);
Оцените, что пакетный размер 15 000 документов. Задайте переменную рабочего пространства MATLAB для того, чтобы хранить полученные данные.
batchsize = 15000; flightdata = [];
Можно изменить пакетный размер в зависимости от производительности и объема памяти системы.
Используйте цикл while
, чтобы получить полетные данные из набора. Переменная flightdata
накапливает каждый пакет полученных данных.
% Track number of documents read index = 0; while index < totaldocs % Retrieve documents in a batch localdata = find(conn,collection,'Query',mongoquery, ... 'Skip',index,'Limit',batchsize); % Store retrieved documents locally flightdata = [flightdata; localdata]; % Move to the next batch index = index + batchsize; end
Отобразите информацию о переменной flightdata
. Полученные данные являются массивом структур, который содержит 75 603 структуры. Каждая структура содержит 30 полей полетных данных.
whos flightdata
Name Size Bytes Class Attributes flightdata 75603x1 285102752 struct
close(conn)
close
| count
| find
| isopen
| mongo
| while