Capítulo 5 – Testes de Carga
5.1 Base de Dados BD1
Na figura seguinte estão representados os valores de tempos obtidos na consulta 1 com utilizadores a aceder concorrentemente à base de dados, nomeadamente, dez, vinte e cinquenta utilizadores.
Figura 29 - Resultado do Teste de carga utilizando a consulta 1
Na figura seguinte estão representados os valores de tempos obtidos na consulta 3 com utilizadores a aceder concorrentemente à base de dados, nomeadamente, dez, vinte e cinquenta utilizadores.
Testes de Carga
_______________________________________________________________________________
68
Figura 30 - Resultado do Teste de carga utilizando a consulta 3
5.2 Base de dados BD2
Na figura seguinte estão representados os valores de tempos obtidos na consulta 1 com utilizadores a aceder concorrentemente à base de dados, nomeadamente, dez, vinte e cinquenta utilizadores.
Figura 31 - Resultado do Teste de carga utilizando a consulta 1
Na figura seguinte estão representados os valores de tempos obtidos na consulta 3 com utilizadores a aceder concorrentemente à base de dados, nomeadamente, dez, vinte e cinquenta utilizadores.
Testes de Carga _____________________________________________________________________________
Figura 32 - Resultado do Teste de carga utilizando a consulta 3
5.3 Base de dados BD3
Na figura seguinte estão representados os valores de tempos obtidos na consulta 1 com utilizadores a aceder concorrentemente à base de dados, nomeadamente, dez, vinte e cinquenta utilizadores.
Figura 33 - Resultado do Teste de carga utilizando a consulta 1
Na figura seguinte estão representados os valores de tempos obtidos na consulta 3 com utilizadores a aceder concorrentemente à base de dados, nomeadamente, dez, vinte e cinquenta utilizadores.
Testes de Carga
_______________________________________________________________________________
70
Figura 34 - Resultado do Teste de carga utilizando a consulta 3
5.4 Base de dados BD4
Na figura seguinte estão representados os valores de tempos obtidos na consulta 1 com utilizadores a aceder concorrentemente à base de dados, nomeadamente, dez, vinte e cinquenta utilizadores.
Figura 35 - Resultado do Teste de carga utilizando a consulta 1
Na figura seguinte estão representados os valores de tempos obtidos na consulta 3 com utilizadores a aceder concorrentemente à base de dados, nomeadamente, dez, vinte e cinquenta utilizadores.
Testes de Carga _____________________________________________________________________________
Figura 36 - Resultado do Teste de carga utilizando a consulta 3
5.5 Discussão de resultados
Relativamente à consulta um não existem muitas diferenças entre os vários tamanhos de bases de dados, apenas de salientar que o MongoDB na BD4, que é a base de dados maior, obteve melhor desempenho que nas restantes que possuem menos dados, apesar da diferença ser mínima sugere um melhor desempenho com maiores quantidades de dados. Em comparação com o MySQL notam-se diferenças substanciais nas barras dos gráficos mas que em relação ao tempo de execução, a diferença entre estas não é muito relevante, sendo apenas diferenças de décimas.
No que diz respeito à consulta três, que era a consulta mais “pesada”, o MySQL tem um desempenho bastante inferior ao MongoDB, chegando mesmo a diferenças de dezenas de segundos. O facto desta consulta ir a múltiplas tabelas prejudica bastante o desempenho do
MySQL em acessos concorrentes à base de dados. A diferença mais substancial é na BD4,
na qual o MongoDB tem um ótimo desempenho com quantidades elevadas de dados e com o máximo de utilizadores em teste, obtendo mesmo uma diferença de cerca de duzentos segundos de diferença relativamente ao MySQL. Onde o MySQL se aproximou mais do
MongoDB foi na BD2 e BD3, mas ainda assim com diferenças de alguns segundos.
Concluindo, com operações de agregação e com consultas que não necessitem de recorrer a muitas tabelas o MySQL revela um bom desempenho, que apesar de ter sido o melhor desempenho as diferenças para o MongoDB não foram muito elevadas o que revela o
MongoDB como uma boa alternativa. Já na consulta três o MySQL, com o aumento do
Testes de Carga
_______________________________________________________________________________
72
MongoDB. Este por sua vez com a BD4, que é a maior base de dados, possui um ótimo
desempenho, mesmo com o máximo de utilizadores testados a acederem concorrentemente à base de dados, o que o torna bastante atrativo para situações em que com a tecnologia relacional exista a necessidade de consultar um número elevado de tabelas.
Conclusões _____________________________________________________________________________
Capítulo 6 – Conclusões
Neste capítulo são apresentadas as conclusões do trabalho efetuado. Este está dividido em três secções, nomeadamente, as contribuições do trabalho para o setor em estudo, as limitações que foram sentidas e o trabalho futuro a ser realizado.
6.1 Contribuições
As bases de dados NoSql estão cada vez mais presentes nas empresas, sendo vistas como uma alternativa viável para armazenamento de grandes volumes de dados quando a disponibilidade e a tolerância ao particionamento são as características mais importantes. Os objetivos propostos para esta dissertação foram atingidos, tendo-se obtido uma comparação entre as tecnologias relacional e não relacional, bem como entre duas Document Databases (MongoDB e CouchDB).
É evidenciado que a tecnologia não relacional, nomeadamente as Document Databases, possui vantagens significativas nas consultas que não utilizam funções de agregação bem como o facto de serem livres de esquemas, o que as torna numa potente alternativa a ser utilizada pelas empresas.
Relativamente aos testes de carga, o MongoDB obteve melhor desempenho comparativamente ao MySQL na consulta que necessitava de percorrer mais tabelas, sendo que assim, conforme a complexidade dos dados aumenta e mais tabelas, por ventura, necessitarem de ser criadas e posteriormente consultadas, o desempenho do MySQL irá agravar-se, contrariamente ao MongoDB, onde o facto de não necessitar de esquemas se torna bastante vantajoso comparativamente ao MySQL.
A situação de migração da tecnologia relacional para a não relacional deve ser devidamente analisada, pois quanto maior o volume de dados maiores são os custos de migração e, sendo assim, as vantagens devem compensar o investimento.
Importa ainda referir que um excerto da presente dissertação foi aprovado em artigo e apresentado na CAPSI 2015 no ISCTE, contribuindo desta forma para a evidenciação das diferenças entre as Document Databases e o MySQL.
6.2 Dificuldades
Em todos os trabalhos existem limitações e sendo assim este não foi exceção. A primeira limitação foi verificada em termos de carregamento de dados, no qual o dataset possuía bastantes dados inconsistentes pelo que teve de ser devidamente tratado. Era pretendido um
Conclusões
_______________________________________________________________________________
74
algo bastante difícil de ser encontrado.
A segunda limitação identificada foi o facto de se lidar com milhões de registos, o que requeria um servidor potente, pelo que o carregamento foi um processo bastante moroso. A terceira e última limitação identificada foi que para embutir documentos, o facto de estes serem complexos e com bastantes campos, a sua criação através do programa em java foi bastante lenta, sendo que foram gerados documentos de seiscentos mil em seiscentos mil, para este não crashar e parar.
6.3 Trabalho futuro
No desenvolvimento desta dissertação vários caminhos podiam ter sido tomados, os quais identificam possibilidades que ficaram por investigar. Estas oportunidades complementam o trabalho realizado pelo que devem ser ponderadas.
No que diz respeito à escalabilidade, pode ser analisado o desempenho das bases de dados relacionais e não relacionais com os servidores distribuídos por várias máquinas e assim efetuar comparações e verificar se são compensatórias as vantagens das bases de dados
NoSql neste ponto. Nessa comparação podem também ser incluídos testes de carga com
vários utilizadores a aceder simultaneamente à base de dados, quer para consultar ou inserir dados, e verificar como esta se comporta. Também se poderia incluir a análise de desempenho relativamente a updates com os testes de carga referidos anteriormente.
Referências Bibliográficas _____________________________________________________________________________
Referências Bibliográficas
10gen. (2011). MongoDB. Retrieved from http://www.MongoDB.org/
Abadi, D. J., & Madden, S. (2008). Query Execution in Column-Oriented Database Systems.
Massachusetts Institute of Technology.
Abramova, V., Bernardino, J., & Pedro, F. (2014). Experimental Evaluation of NoSql Databases.
International Journal of Database Management Systems (IJDMS), 6(3), 1–16.
Alexandre, J., & Cavique, L. (2013). NoSql no suporte à análise de grande volume de dados. Revista de Ciencias de Computação, 8, 37 – 48. Retrieved from http://repositorioaberto.uab.pt/handle/10400.2/3091
Almeida, R. C. De, & Brito, P. F. De. (2012). Utilização da Classe de Banco de Dados
NOSQL como Solução para Manipulação de Diversas Estruturas de Dados. Palmas.
Anderson, J. C., Lehnardt, J., & Slater, N. (2010). CouchDB: The Definitive Guide. (O. M. Inc., Ed.).
Apache CouchDB. (2011). Retrieved from http://CouchDB.apache.org/
Atzeni, P., Bugiotti, F., & Rossi, L. (2013). Uniform access to NoSql systems. Information Systems, 43, 117–133. doi:10.1016/j.is.2013.05.002
Baltzan, P., & Phillips, A. (2012). Business driven information systems (3a edição.). Basso, C., & Padua, R. de. (2014). O Uso de Big Data nas Universidades. Seminário de Iniciação
Científica, 94. Retrieved from
http://editora.unoesc.edu.br/index.php/siepe/article/view/5567
Bell, C., Kindahl, M., & Thalmann, L. (2010). MySQL High Availability. (A. Oram, Ed.) (1o edition.). O’Reilly Media, Inc.
Bock, D. B., & Schrage, J. F. (2002). Denormalization guidelines for base and transaction tables.
ACM SIGCSE Bulletin, 34, 129. doi:10.1145/820127.820184
Bonnet, L., Laurent, A., Sala, M., Laurent, B., & Sicard, N. (2011). Reduce, you say: What
NoSql can do for data aggregation and BI in large repositories. Proceedings - International
Workshop on Database and Expert Systems Applications, DEXA, 483–488. doi:10.1109/DEXA.2011.71
Brewer, E. (2000). Towards Robust Distributed Systems. In Proceedings of the nineteenth annual ACM symposium on Principles of distributed computing (Vol. 19, pp. 1–12). doi:10.1145/343477.343502
Referências Bibliográficas
_______________________________________________________________________________
76
Carniel, A. C., Sá, A. D. A., Henrique, V., Brisighello, P., Ribeiro, M. X., Bueno, R., Ciferri, R. R. (2012). Análise Experimental de Bases de Dados Relacionais e NoSql no Processamento de Consultas sobre Data Warehouse. Brazilian Symposium on Databases -
Short Paper, d, 113–120. Retrieved from
http://data.ime.usp.br/sbbd2012/artigos/pdfs/sbbd_shp_15.pdf
Castro, J., & Batista, E. (2013). Comparação entre Banco de Dados Relacionais e Não- Relacionais – MySQL x NoSql. Revista Network Technologies Faculdades Network – Revista Da Faculdade de Sistema de Informação, Ano 7, No, 111.
Cattell, R. (2011). Scalable SQL and NoSql data stores. ACM SIGMOD Record, 39(4), 12. doi:10.1145/1978915.1978919
Clarck, B. (2009). NoSql: If Only It Was That Easy. Retrieved February 11, 2015, from https://markedaspertinent.wordpress.com/2009/08/04/NoSql-if-only-it-was-that-easy/ Coronel, C., Morris, S., & Rob, P. (2013). Database Systems: Design, Implementation and Management. Management (p. 692).
D., M., & Kelly, A. (2013). Making Sense of NoSql: A guide for managers and the rest of us.
Date, C. J. (2004). Introdução a Sistemas de Bancos de Dados. (E. Campus, Ed.) (8a edição.).
Dean, J., & Ghemawat, S. (2004). MapReduce: Simplied Data Processing on Large Clusters.
Proceedings of 6th Symposium on Operating Systems Design and Implementation, 137– 149. doi:10.1145/1327452.1327492
DeCandia, G., Hastorun, D., Jampani, M., Kakulapati, G., Lakshman, A., Pilchin, A., Vogels, W. (2007). Dynamo : Amazon’s Highly Available Key-value Store. ACM SIGOPS Operating Systems Review, 41, 205–220. doi:10.1145/1323293.1294281
Diana, M. De, & Gerosa, M. A. (2010). NoSql na Web 2.0: Um estudo comparativo de bancos Não-Relacionais para Armazenamento de Dados na Web 2.0. WTDBD 2010-IX Workshop de Teses E Dissertações em Bancos de Dados. Retrieved from http://www.lbd.dcc.ufmg.br/colecoes/wtdbd/2010/sbbd_wtd_12.pdf
Dimitrov, M. (2010). NoSql Databases. Ontotext. Retrieved from http://pt.slideshare.net/marin_dimitrov/NoSql-databases-3584443
Ferreira, L. (2012). Bridging the gap between SQL and NoSql. Universidade do Minho. Forbes, D. (2010). Getting Real about NoSql and the SQL-Isn’t-Scalable Lie. Retrieved from https://dennisforbes.ca/index.php/2010/03/02/getting-real-about-NoSql-and-the-Sql-isnt- scalable-lie/
Frozza, A. A., Schuch, E. M., Ohana, G., & Catarina, B. (2011). POSTGRESQL X
Referências Bibliográficas _____________________________________________________________________________
Gilbert, S., & Lynch, N. (2002). Brewer’s conjecture and the feasibility of consistent, available, partition-tolerant web services. ACM SIGACT News, 33, 51. doi:10.1145/564585.564601
Grolinger, K., Higashino, W. a, Tiwari, A., & Capretz, M. A. (2013). Data management in cloud environments: NoSql and NewSQL data stores. Journal of Cloud Computing: Advances, Systems and Applications, 2, 22. doi:10.1186/2192-113X-2-22
Guimarães, T., Nakai, A., & Vieira, L. (2013). Banco de dados NoSql para integração de bases de dados de gases de efeito estufa. Mostra de Estagiários e Bolsistas da Embrapa Informática Agropecuária, 9., 2013, Campinas. Brasília, DF: Embrapa, 2013. Retrieved from http://www.alice.cnptia.embrapa.br/bitstream/doc/981973/1/NoSql.pdf
Han, J., Haihong, E., Le, G., & Du, J. (2011). Survey on NoSql database. Proceedings - 2011 6th International Conference on Pervasive Computing and Applications, ICPCA 2011, 363– 366. doi:10.1109/ICPCA.2011.6106531
Hecht, R., & Jablonski, S. (2011). NoSql evaluation: A use case oriented survey. 2011 International Conference on Cloud and Service Computing, 336–341. doi:10.1109/CSC.2011.6138544
Imielinski, T., & Lipski, W. (1982). A systematic approach to relational database. In ACM SIGMOD international conference on Management of data (pp. 8–14). Retrieved from http://dl.acm.org/citation.cfm?id=582356&dl=ACM&coll=DL&CFID=478886163&CFT OKE N=69157666
Indrawan-Santiago, M. (2012). Database research: Are we at a crossroad? Reflection on
NoSql. Proceedings of the 2012 15th International Conference on Network-Based
Information Systems, NBIS 2012, 45–51. doi:10.1109/NBiS.2012.95
Jacobs, A. (2009). The Pathologies of Big data. ACM Queue, 7(6). Retrieved from http://queue.acm.org/detail.cfm?id=1563874
James Manyika, Michael Chui, Brad Brown, Jacques Bughin, Richard Dobbs, Charles Roxburgh, A. H. B. (2011). Big data: The next frontier for innovation, competition, and productivity. McKinsey Global Institute, (June), 156. doi:10.1080/01443610903114527 Leavitt, N. (2010). Will NoSql Databases Live Up to Their Promise? Computer, 43(2), 12– 14. doi:10.1109/MC.2010.58
Lee, K. K. Y., Tang, W. C., & Choi, K. S. (2013). Alternatives to relational database: Comparison of NoSql and XML approaches for clinical data storage. Computer Methods and Programs in Biomedicine, 110(1), 99–109. doi:10.1016/j.cmpb.2012.10.018
Liu, Z., He, B., Hsiao, H., & Chen, Y. (2011). Efficient and scalable data evolution with column oriented databases. … Conference on Extending Database, 105 – 116. doi:10.1145/1951365.1951380
Lóscio, B. F., Oliveira, H. R. De, & Pontes, J. C. D. S. (2011). NoSql no desenvolvimento de aplicações Web colaborativas, 1 – 17. Retrieved from
Referências Bibliográficas
_______________________________________________________________________________
78
http://www.addlabs.uff.br/sbsc_site/SBSC2011_NoSql.pdf Mattar, F. N. (1994). Pesquisa de Marketing.
MongoDB. (2011a). BSON. Retrieved February 11, 2015, from http://blog.MongoDB.org/post/114440717/bson
MongoDB. (2011b). Data Models. Retrieved February 11, 2015, from http://docs.MongoDB.org/manual/data-modeling/
MongoDB. (2011c). ObjectId. Retrieved February 11, 2015, from http://docs.MongoDB.org/manual/reference/object-id/
MongoDB. (2011d). Replication. Retrieved February 11, 2015, from http://docs.MongoDB.org/manual/replication/
MongoDB. (2011e). SQL to MongoDB Mapping Chart. Retrieved February 11, 2015, from
http://docs.MongoDB.org/manual/reference/Sql-comparison/
Moniruzzaman, A., & Hossain, S. (2013). NoSql database: New era of databases for Big
data analytics-classification, characteristics and comparison. arXiv Preprint arXiv:1307.0191, 6(4), 1–14. Retrieved from http://arxiv.org/abs/1307.0191
Parikh, J. (2013). Facebook Newsroom : A new Datacenter for Iowa. Retrieved February 11, 2015, from http://newsroom.fb.com/
Piovesan, A., & Temporini, E. R. (1995). Pesquisa exploratória: procedimento metodológico para o estudo de fatores humanos no campo da saúde pública. Revista de Saúde Pública, 29 (011), 318 – 325. doi:10.1590/S0034-89101995000400010
Pozzani, G. (2013). Introduction to NOSQL. NoSql Seminar. NoSql Seminar. Retrieved from http://www.cs.tut.fi/~tjm/seminars/NoSql2012/NoSql-Intro.pdf
Pritchett, D. (2008). Base: an Acid Alternative. Queue, 6(June 2008), 48–55. doi:10.1145/1394127.1394128
Purcell, B. (2013). The emergence of “Big data” technology and analytics. Journal of Technology Research, 1 – 7.
Queiroz, G. R. De, Miguel, A., Monteiro, V., & Câmara, G. (2013). Bancos de Dados Geográficos e Sistemas NoSql : Onde Estamos e para Onde vamos, Geographic Databases and NoSql : Accomplishments and Future Directions. Revista Brasileira de Cartografia, 479–492.
Redmond, E., & Wilson, J. R. (2012). Seven Databases in Seven Weeks. North (p. 347). Révillion, A. S. P. (2001). A Utilização de Pesquisas Exploratórias na Área de Marketing. XXV
Encontro Da ANPAD, 1 – 15.
Referências Bibliográficas _____________________________________________________________________________
Metodologia científica. doi:10.1038/140260c0
Rybiński, H. (1987). On First-Order-Logic Databases. ACM Transactions on Database Systems.
Retrieved from http://dl.acm.org/citation.cfm?id=27630 Sadalage, P. J., & Fowler, M. (2012). NoSql Distilled (p. 192).
Sampieri, Collado, & Lucio. (1991). Metodología de la investigación. Mexico.
Schram, A., & Anderson, K. M. (2012). MySQL to NoSql. Proceedings of the 3rd Annual Conference on Systems, Programming, and Applications: Software for Humanity - SPLASH ’12, 191. doi:10.1145/2384716.2384773
Scofield, B. (2009). NoSql Misconceptions. Retrieved from http://viget.com/extend/NoSql- misconceptions
Shawrtz, B., Zaitsev, P., & Tkachenco, V. (2012). High Performance MySQL. (A. Oram, Ed.) (3ord Editi.). O’Reilly Media, Inc.
Silberschartz, A., Korth, H., & Sudarshan, S. (1999). Sistemas de Banco de Dados.
Silva, C. A. R. F. O. Da. (2011). Data modeling with NoSql : how, when and why. Faculdade de Engenharia da Universidade do Porto. Retrieved from http://hdl.handle.net/10216/61586 Sousa, P. (2010). O teorema CAP. Retrieved February 26, 2015, from https://unrealps.wordpress.com/2010/12/28/o-teorema-cap/
Stonebraker, M. (2009). The “NoSql” Discussion has Nothing to Do With SQL. Retrieved from http://cacm.acm.org/blogs/blog-cacm/50678-the-NoSql-discussion-has-nothing-to- do-with- Sql/fulltext
Stonebraker, M. (2010). SQL databases v. NoSql databases. Communications of the ACM, 53(4), 10. doi:10.1145/1721654.1721659
Stonebraker, M. (2011). Stonebraker on NoSql and enterprises. Communications of the ACM, 54(8), 10. doi:10.1145/1978542.1978546
Strauch, C. (2010). NoSql Databases (p. 120). Stuttgart. Tiwari, S. (2011). Professional
NoSql.
Tauro, J. M., Aravindh, S., Shreeharsha, A. B. (2012). Comparative Study of the New Generation, Agile, Scalable, High Performance NOSQL Databases. International Journal of Computer Applications, 48(20), 1–4. doi:10.5120/7461-0336
Toth, R. (2012). Abordagem NoSql – uma real alternativa. Dcomp.sor.ufscar.br, 1–6. Retrieved from http://www.dcomp.sor.ufscar.br/verdi/topicosCloud/NoSql_artigo.pdf Toth, R. M. (2011). Abordagem NoSql- Uma real Alternativa (pp. 1 – 6). Sorocaba. Retrieved from http://www2.sor.ufscar.br/verdi/topicosCloud/NoSql_artigo.pdf
Referências Bibliográficas
_______________________________________________________________________________
80
conceitos, ferramentas, linguagens e estudos de casos no contexto de Big data. Simpósio Brasileiro DE Banco de Dados, (1), 1 – 30. Retrieved from http://data.ime.usp.br/sbbd2012/artigos/pdfs/sbbd_min_01.pdf
Vogels, W. (2009). Eventually Consistent. Communications of the Acm, 52, 14. doi:10.1145/1466443.1466448
Warden, P. (2011). Big data Glossary. (M. Loukides, Ed.) (p. 56). O’Reilly Media, Inc. White, T. (2012). Hadoop: The definitive guide. Online (Vol. 54, p. 258). doi:citeulike- article- id:4882841
Anexos _____________________________________________________________________________
Anexos _____________________________________________________________________________
Anexo A
Extrato de Código 1 package dissertacao.Classes; import java.io.Serializable; import java.util.ArrayList; import java.util.List; /** * * @author Gon */public class Airplane { public String tailnum; public String issue_data; public String year;
public String status; public String airline; public String engine_type; public String type;
public String aircraft_type; public String model;
public String manufacturer; public Object id;
// get & set @Override
public String toString() { String s = "{" + "'tailnum':'" + tailnum + "'" + ", 'issue_data':'" + issue_data + "'" + ", 'year_airplane':" + year + ", 'status':'" + status + "'" + ", 'airline':'" + airline + "'" + ", 'engine_type':'" + engine_type + "'" + ", 'type':'" + type + "'" + ", 'aircraft_type':'" + aircraft_type + "'" + ", 'model':'" + model + "'" + ", 'manufacturer':'" + manufacturer + "'" + "}"; return s; } package dissertacao.Classes; /**
Anexos _______________________________________________________________________________ 84 * * @author Gon */
public class Airport {
public Object idAirport; public String airport; public Object city; public Object state; public Object country; public Object latitude; public Object longitude; public Object id;
// get & set @Override
public String toString() { String s = "{" + "'idAirport':'" + idAirport + "'" + ", 'airport':'" + airport + "'" + ", 'city':'" + city + "'" + ", 'state':'" + state + "'" + ", 'country':'" + country + "'" + ", 'latitude':'" + latitude + "'" + ", 'longitude':'" + longitude + "'" + "}"; return s; } } package dissertacao.Classes; /** * * @author Gon */
public class Flight {
public Object id_flight; public Object month; public Object year;
public Object dayofmonth; public Object dayofweek; public Object deptime; public Object crsdeptime; public Object arrtime; public Object crsarrtime;
Anexos _____________________________________________________________________________
public Object flightnum; public Object id;
public Object tailnum;
public Object actualelapsedtime; public Object crselapsedtime; public Object airtime;
public Object arrdelay; public Object depdeplay; public Object origin; public Object dest; public Object distance; public Object taxiin; public Object taxiout; public Object cancelled; public Object diverted; public Airplane airplane; public Airport airport;
// get & set @Override
public String toString() { return "Flight{" + " _id='" + id + "'" + ", id_flight='" + id_flight.toString() + "'" + ", month='" + month.toString() + "'" + ", year='" + year + "'" + ", dayofmonth='" + dayofmonth + "'" + ", dayofweek='" + dayofweek + "'" + ", deptime='" + deptime + "'" + ", crsdeptime='" + crsdeptime + "'" + ", arrtime='" + arrtime + "'" + ", crsarrtime='" + crsarrtime + "'" + ", arrdelay='" + arrdelay + "'" + ", depdeplay='" + depdeplay + "'" + ", airtime='" + airtime + "'" + ", actualelapsedtime='" + actualelapsedtime + "'" + ", crselapsedtime='" + crselapsedtime + "'" + ", flightnum='" + flightnum + "'" + ", tailnum='" + tailnum + "'" + ", origin='" + origin + "'" + ", dest='" + dest + "'" + ", distance='" + distance + "'" + ", taxiin='" + taxiin + "'" + ", taxiout='" + taxiout.toString() + "'" + ", cancelled='" + cancelled + "'" + ", diverted='" + diverted + "'" + ", airport=" + airport.toString() + ", airplane=" + airplane.toString() +
Anexos _______________________________________________________________________________ 86 '}'; } } Extrato de código 2 package dissertacao; import com.MongoDB.DB; import com.MongoDB.MongoClient; import java.net.UnknownHostException; /** * * @author Gon */ class MongoConnection {
private static final String HOST = "127.0.0.1"; private static final int PORT = 27017;
private static final String db_name = "tese4";
private static MongoConnection uniqInstance; private static int mongoInstance = 1;
private MongoClient mongo; private DB db;
private MongoConnection(){
// contrutor private para ser usado pela variavel criada acima
}
public static synchronized MongoConnection getInstance() {
if(uniqInstance == null) {
uniqInstance = new MongoConnection(); }
return uniqInstance; }
// garante um unico objeto mongo public DB getDB()
{
if(mongo == null) {
try{
mongo = new MongoClient(HOST, PORT); db = mongo.getDB(db_name);
Anexos _____________________________________________________________________________ mongoInstance++); } catch(UnknownError e) { e.printStackTrace(); } } return db; } } Extrato de código 3 package dissertacao; import com.MongoDB.DBCollection; import com.MongoDB.DBCursor; import com.MongoDB.DBObject; import dissertacao.Classes.AirplaneConverter; import dissertacao.Classes.Flight; import java.util.ArrayList; import java.util.List; /** * * @author Gon */
public class FlightDao { private DBCollection db; public FlightDao() { this.db = MongoConnection.getInstance().getDB().getCollection("Flight" ); System.out.println(db); }
public List<Flight> findFlight(DBObject dbo) {
ArrayList<Flight> avioes = new ArrayList<Flight>();
DBCursor cursor = db.find(dbo); long i = 0; while (cursor.hasNext()){ if(i > 40800000 && i < 41400001) { avioes.add(AirplaneConverter.converterParaFlight(cursor.next ())); } else if(i > 41400001)
Anexos _______________________________________________________________________________ 88 { System.out.println("brekou"); break; } else { cursor.next(); } i += 1; } return avioes; } } package dissertacao; import com.MongoDB.DBCollection; import com.MongoDB.connection.Connection; import com.MongoDB.DBCursor; import com.MongoDB.DBObject; import com.MongoDB.Mongo; import dissertacao.Classes.Airplane; import dissertacao.Classes.AirplaneConverter; import java.io.Serializable; import java.util.ArrayList; import java.util.List; /** * * @author Gon */
public class AirplaneDao implements IAirplaneDao<Airplane>{ private DBCollection db; public AirplaneDao() { this.db = MongoConnection.getInstance().getDB().getCollection("Airplan e"); System.out.println(db); }
public List<Airplane> findAirplanes(DBObject dbo) {