文档章节

关于Mongo与SQL

cwalet
 cwalet
发布于 2015/01/09 10:39
字数 470
阅读 130
收藏 2

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

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

三、可与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中的数据。当然该工具目前是收费的…


© 著作权归作者所有

共有 人打赏支持
cwalet
粉丝 44
博文 111
码字总数 87663
作品 0
其他
私信 提问
MongoDB查询总结

MongoDB查询总结 MongoDB查询总结 介绍 普通查询 聚合查询 Map-Reduce 示例说明 总结 相关资料 介绍 前面写过一篇关于Mongodb的例子——浅谈MongoDB数据库,当时使用的只是简单的查询,然后后...

流水不腐小夏
2017/10/25
0
0
mongodb 备份压缩及清除指定日期前的数据

#!/usr/bin/bash #define:Mongodb data backup regularly, delete data before the specified time #date:2016-12-20 curr_dir=pwd backdir="/data/bak/mongodbbak" mongo_comm="/usr/local/......

空灵飞渡
2016/12/28
88
0
集成多种 NOSQL 方案的统一 SQL 代理中间件--dataux

集成多种 NOSQL 方案的统一 SQL 代理中间件 Sql查询代理到 Elasticsearch,Mongo,Kubernetes,BigTable等 将不同的数据源和文件统一到数据的单一联合视图中,并使用SQL进行查询,且无需复制...

匿名
2017/10/20
124
1
mysql、mongoDB自动化备份脚本与恢复命令

mysql自动备份脚本 vim /var/tool/mysqlbackup.sh !/bin/bash shijie= backDatabaseDB=database$shijie.sql backDatabaseFile=database$shijie.tar.gz cd /var/mysql/back/ /usr/local/mysq......

zbylovecool
2011/11/24
0
0
入门MongoDB,你需要注意的4个技巧

我之所以喜欢MongoDB,主要是因为在动态语言中使用它是如此的简单,自然。到目前为止,我已经在两个项目(Encode 和 Sparrw)中使用过它了,虽然对这个选择我非常满意,但是有些问题我还是没...

五味格子
2011/05/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

js数组遍历和对象遍历

数组遍历 for for(var i=0,len=arr.length;i<len;i++){console.log(arr[i]);} forEach - ES5语法,性能比for弱,不能使用break终止循环,不能使用return arr.forEach(function(item,inde......

祖达
34分钟前
2
0
Java网络编程

基本概念 网络IO会涉及到同步,异步,阻塞,非阻塞等几个概念。 一个网络IO读取过程是数据从 网卡 到 内核缓冲区 到 用户内存 的过程。同步和异步区别在于数据从内核到用户内存的过程是否需要...

春哥大魔王的博客
56分钟前
2
0
Spring "reg:zookeeper" 的前缀 "reg" 未绑定等类似问题解决方案。

今天同事遇到一个Spring启动加载配置文件时,不识别reg:zookeeper标签的问题。 我查看配置,发现是Spring配置文件的头部没有引入reg标签的命名空间,具体如下图: 所以,以后遇到类似的标签未...

花漾年华
今天
2
0
阿里云领衔云市场

近期,2018年Q4及全年的全球云基础设施服务市场数据新鲜出炉,发布方是美国市场研究机构Synergy Research Group。这个机构是专做电信网络市场情报的公司,成立于1999年,每年都会公布各大公有...

linuxCool
今天
2
0
C++友元函数和友元类(C++ friend)详解

私有成员只能在类的成员函数内部访问,如果想在别处访问对象的私有成员,只能通过类提供的接口(成员函数)间接地进行。这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书...

shzwork
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部