关于Mongo与SQL

一、文档式非关系型数据库,插入与查询速度快,便于多元数据结构的数据存储;

二、过于松散的数据组织不利于后期的查询与计算,因此初期还是需要对文档结构做一定的约束;

三、可与Hadoop很好的结合,官方支持MongoDB Connector for Hadoop。后期计算如遇到瓶颈可以考虑数据库分片或者将数据查询迁移到 Map/Reduce框架中;

四、考虑到开发人员均有部分SQL和Java程序基础,采用MongoDB可以减轻学习成本,充分利用现有技能。具体包括:


  • 会SQL的同学,可以考虑使用Query Translator将标准SQL转换为mongo查询语言

  • 会Javascript的同学,mongo shell采用js作为内置语言,可以直接调用js标准库函数,方便查询MongoDB数据库

  • 会Java的同学,可以使用UnityJDBC,该工具实现了JDBC接口,可以使用大部分标准SQL,驱动程序内部会将其转换为mongo查询语句。免去了学习MongoDB官方驱动API的时间。API使用方法如下:

import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.sql.*;

public class MongoDB {

	public static void main(String[] args) throws Exception {
		ClassLoader cl = ClassLoader.getSystemClassLoader();
		Method method = URLClassLoader.class.getDeclaredMethod("addURL", new Class[]{URL.class});
		method.setAccessible(true);
		method.invoke(cl, new File("C:\\Program Files\\UnityJDBC\\mongodb_unityjdbc_full.jar").toURI().toURL());
		Class.forName("mongodb.jdbc.MongoDriver");
		String url = "jdbc:mongo://1.1.1.1:27017/test";
		Connection con = DriverManager.getConnection(url, "", "");
		Statement stmt = con.createStatement();
		String sql = "SELECT * FROM data";
		ResultSet rs = stmt.executeQuery(sql);
		ResultSetMetaData meta = rs.getMetaData();
		int numColumns = meta.getColumnCount();
		System.out.print(meta.getColumnName(1));
		for (int j = 2; j <= meta.getColumnCount(); j++)
			System.out.print(", " + meta.getColumnName(j));
		System.out.println();
		while (rs.next())
			System.out.println(rs.getObject("address").getClass().isInstance(Class.forName("com.mongodb.BasicDBObject").newInstance()));
		rs.close();
		stmt.close();
		con.close();
	}
}
  • UnityJDBC 不仅提供Java-API,还包含一个Java开发的GUI客户端,可以通过SQL方便的查询MongoDB中的数据。当然该工具目前是收费的…


转载于:https://my.oschina.net/cwalet/blog/365412

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值