NoSQL,指的是非關(guān)系型的數(shù)據(jù)庫。隨著互聯(lián)網(wǎng)web2.0網(wǎng)站的興起,傳統(tǒng)的關(guān)系數(shù)據(jù)庫在應(yīng)付web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的
專注于為中小企業(yè)提供做網(wǎng)站、成都網(wǎng)站建設(shè)服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)九原免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千多家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
SNS類型的web2.0純動態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服的問題,而非關(guān)系型的數(shù)據(jù)庫則由于其本身的特點得到了非常迅速的發(fā)展。
NoSQL(NoSQL
= Not Only SQL
),意即“不僅僅是SQL”,是一項全新的數(shù)據(jù)庫革命性運動,早期就有人提出,發(fā)展至2009年趨勢越發(fā)高漲。NoSQL的擁護者們提倡運用非關(guān)系型的數(shù)
據(jù)存儲,相對于鋪天蓋地的關(guān)系型數(shù)據(jù)庫運用,這一概念無疑是一種全新的思維的注入。
從這一新興技術(shù)中選擇一款正確的NoSQL數(shù)據(jù)庫是非常具有挑戰(zhàn)性的。比一下網(wǎng)建議在選擇時考慮以下因素:
并發(fā)控制
并
發(fā)控制指的是當多個用戶同時更新運行時,用于保護數(shù)據(jù)庫完整性的各種技術(shù)。并發(fā)機制不正確可能導(dǎo)致臟讀、幻讀和不可重復(fù)讀等此類問題。并發(fā)控制的目的是保
證一個用戶的工作不會對另一個用戶的工作產(chǎn)生不合理的影響。在某些情況下,這些措施保證了當用戶和其他用戶一起操作時,所得的結(jié)果和她單獨操作時的結(jié)果是
一樣的。在另一些情況下,這表示用戶的工作按預(yù)定的方式受其他用戶的影響。
封鎖
就是事務(wù)T在對某個數(shù)據(jù)對象(例如表、記錄等)操作之前,先向系統(tǒng)發(fā)出請求,對其加鎖。加鎖后事務(wù)T就對該數(shù)據(jù)對象有了一定的控制,在事務(wù)T釋放它的鎖之前,其它的事務(wù)不能更新此數(shù)據(jù)對象。
封鎖是一次只允許一個用戶讀取或修改的一種機制,是實現(xiàn)并發(fā)控制的一個非常重要的技術(shù)。
MVCC
Multi-Version Concurrency Control多版本并發(fā)控制,維持一個數(shù)據(jù)的多個版本使讀寫操作沒有沖突。MVCC優(yōu)化了數(shù)據(jù)庫并發(fā)系統(tǒng),使系統(tǒng)在有大量并發(fā)用戶時得到最高的性能,并且可以不用關(guān)閉服務(wù)器就直接進行熱備份。
ACID
指
數(shù)據(jù)庫事務(wù)正確執(zhí)行的四個基本要素的縮寫。包含:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久
性(Durability)。一個支持事務(wù)(Transaction)的數(shù)據(jù)庫系統(tǒng),必需要具有這四種特性,否則在事務(wù)過程(Transaction
processing)當中無法保證數(shù)據(jù)的正確性,交易過程極可能達不到交易方的要求。
None
一些系統(tǒng)不提供原子性。
鏡像
數(shù)據(jù)庫鏡像是DBMS根據(jù)DBA的要求,自動把整個數(shù)據(jù)庫或其中的關(guān)鍵數(shù)據(jù)復(fù)制到另一個磁盤上,每當主數(shù)據(jù)庫更新時,DBMS會自動把更新后的數(shù)據(jù)復(fù)制過去,即DBMS自動保證鏡像數(shù)據(jù)與主數(shù)據(jù)的一致性。
鏡像分為同步和異步。
數(shù)據(jù)存儲
指的是數(shù)據(jù)的物理特性怎樣被存儲在數(shù)據(jù)庫中。
磁盤 數(shù)據(jù)被存儲在硬盤驅(qū)動器里;
GFS或谷歌文件系統(tǒng)是一個由谷歌開發(fā)的專有的分布式文件系統(tǒng);
Hadoop是Apache軟件框架,免費許可下支持數(shù)據(jù)密集型分布式應(yīng)用程序;
RAM隨機存儲器;
插件 可以添加外部插件;
Amazon S3通過Web服務(wù)接口提供存儲;
BDB:BDB
全稱是 “Berkeley DB”,它是MySQL具有事務(wù)能力的表類型,由Sleepycat
Software開發(fā)。BDB表類型提供了MySQL用戶長久期盼的功能,即事務(wù)控制能力。在任何RDBMS中,事務(wù)控制能力都是一種極其重要和寶貴的功
能。事務(wù)控制能力使得我們能夠確保一組命令確實已經(jīng)全部執(zhí)行成功,或者確保當任何一個命令出現(xiàn)錯誤時所有命令的執(zhí)行結(jié)果均被退回。
實現(xiàn)語言
實現(xiàn)語言會影響數(shù)據(jù)庫的發(fā)展速度。典型的NoSQL數(shù)據(jù)庫是用低級語言如C / C + +編寫的。另一方面,那些更高層次的語言如Java,使自定義更容易。
實現(xiàn)語言有:C, C++, Erlang, Java, Python
特性
考慮下列哪一個特點對你的數(shù)據(jù)庫是最重要的:
持久性
可用性
一致性
分區(qū)容忍性
證書類型
下面這些許可證是一個不同的開放源碼許可的形式:
GPL:通用公共許可證
BSD:伯克利軟件分發(fā)
MPL:Mozilla公共許可證
EPL:Eclipse公共許可證
IDPL:最初的開發(fā)者的公共許可證
LGPL:較寬松通用公共許可證
存儲類型
存儲類型是NoSQL數(shù)據(jù)庫最大的不同,是決定使用哪款數(shù)據(jù)庫的一個首要指標。
關(guān)鍵字:支持get、put和刪除操作
按列存儲:相對于傳統(tǒng)的按行存儲,數(shù)據(jù)集成容易多了
面向文件系統(tǒng):存儲像是JSON或XML這樣的結(jié)構(gòu)化文件,很容易就能從面向?qū)ο筌浖蝎@取數(shù)據(jù)。
下面是NoSQL Database的特性簡介:
數(shù)據(jù)模型簡單
●Key-Value式的存儲,其中key由一級主要key和二次次要key組成
●由Java寫成,支持基于Java API 的Put、Delete和GET操作
擴展性強
●支持自動地基于hash函數(shù)的數(shù)據(jù)分片策略
●提供基于數(shù)據(jù)節(jié)點拓撲結(jié)構(gòu)和訪問延遲的智能控制,以提供最佳的數(shù)據(jù)訪問性能
行為可預(yù)測性
●提供ACID 的事務(wù)性支持,并且支持基于全局和單個操作的事務(wù)級別設(shè)置
●通過B-tree 數(shù)據(jù)結(jié)構(gòu)構(gòu)成的Cache層和高效的查詢調(diào)度機制,提供可控的請求延時
高可用性
●沒有單點故障
●提供內(nèi)置且可配置的數(shù)據(jù)復(fù)制備份機制
●對單點或多點故障有很好的容錯性
●通過跨數(shù)據(jù)中心的數(shù)據(jù)備份,提供數(shù)據(jù)的災(zāi)難恢復(fù)
簡單的管理與維護
●除了命令行之外,還提供基于Web的界面管理工具
●提供對系統(tǒng)及數(shù)據(jù)節(jié)點的控制控制
●可以查看系統(tǒng)的拓撲結(jié)構(gòu)、系統(tǒng)狀態(tài)參數(shù)、當前負載情況、請求延遲記錄、內(nèi)部事件及通知等信息
NoSQL數(shù)據(jù)庫有很多種,實現(xiàn)方式差別很大。有接近SQL查詢方式的,也有純粹的鍵值對查詢。
對于K-V型數(shù)據(jù)庫,比較典型的是Redis,系統(tǒng)提供了get、set之類的命令用于增刪改查。關(guān)鍵是鍵值對的鍵和值怎么設(shè)計。
MongoDB是一個面向文檔的數(shù)據(jù)庫,屬于NoSQL數(shù)據(jù)庫,它使用類似JSON的文檔和schemata。
MongoDB的默認接口是(CLI)命令行,新用戶很難像專業(yè)人員那樣處理數(shù)據(jù)庫。因此,有一些MongoDB管理工具來提供GUI界面以提高生產(chǎn)力。就像phpmyadmin為MySQL/MariaDB數(shù)據(jù)庫提供基于HTTP網(wǎng)絡(luò)的GUI界面一樣。但是,此處包含的所有工具都不是基于HTTP的,只有少數(shù)工具為MongoDB提供Web界面。以下是使用GUI的比較流行的MongoDB管理工具列表:
要從具有圖形用戶界面的MongoDB開始,MongoDB是最好的方法之一。MongoDB Compass Community由MongoDB開發(fā)人員開發(fā),這意味著更高的可靠性和兼容性。它為MongoDB提供GUI mongodb工具,以 探索 數(shù)據(jù)庫交互;具有完整的CRUD功能并提供可視方式。借助內(nèi)置模式可視化,用戶可以分析文檔并顯示豐富的結(jié)構(gòu)。為了監(jiān)控服務(wù)器的負載,它提供了數(shù)據(jù)庫操作的實時統(tǒng)計信息。就像MongoDB一樣,Compass也有兩個版本,一個是Enterprise(付費),社區(qū)可以免費使用。適用于Linux,Mac或Windows。
NoSQLBooster是MongoDB CLI界面中非常流行的GUI工具。它正式名稱為MongoBooster。NoSQLBooster是一個跨平臺,它帶有一堆mongodb工具來管理數(shù)據(jù)庫和監(jiān)控服務(wù)器。這個Mongodb工具包括服務(wù)器監(jiān)控工具,Visual Explain Plan,查詢構(gòu)建器,SQL查詢,ES2017語法支持等等......它有免費,個人和商業(yè)版本,當然,免費版本有一些功能限制。NoSQLBooster也可用于Windows,MacOS和Linux。
ClusterControl是另一個MongoDB工具,具有管理數(shù)據(jù)庫基礎(chǔ)結(jié)構(gòu)的GUI。它還有兩個版本 - 社區(qū)和企業(yè)版。不用說,ClusterControl社區(qū)版可以免費使用,而企業(yè)則是付費的。它不僅限于MongoDB,還支持MySQL,MySQL復(fù)制,MySQL NDB集群,Galera集群,MariaDB,PostgreSQL,TimescaleDB,Docker和ProxySQL。
ClusterControl為數(shù)據(jù)庫基礎(chǔ)架構(gòu)提供全自動安全性,該基礎(chǔ)架構(gòu)具有單個圖形用戶界面,可操作和自動化MongoDB和MySQL數(shù)據(jù)庫環(huán)境。它可通過YUM/APT提供回購,適用于Linux平臺(RedHat,Centos,Ubuntu或Debian)。
Nosqlclient是一個免費的開源MongoDB管理工具,基于Web的GUI意味著不再需要命令行來管理數(shù)據(jù)庫。我們可以使用Nosqlclient在MongoDB中插入,刪除或更新數(shù)據(jù),而無需使用查詢。它可作為桌面應(yīng)用程序,Docker和Web應(yīng)用程序使用。Web使用HTTP為MOngoDB提供基于瀏覽器的界面。
Robo 3T由MongoDB客戶端Studio 3T的開發(fā)人員維護和提供。以前,Robo 3T被稱為Robomongo。它也是適用于Windows,MacOS和Linux的跨平臺MongoDB GUI管理工具。它具有相同的引擎和環(huán)境,是MongoDB shell(3.2)的一部分。
上面提到的Robomong被3T收購并更名為Robot 3T;現(xiàn)在是Studio 3T的一部分。那么,Studio 3T是什么?與其他提到的MongoDB管理GUI工具一樣,Studio 3T也是一個基于GUI的工具,用于管理數(shù)據(jù)庫,但在付費類別中。但是,此工具的30天免費試用版允許用戶在投入資金之前使用并了解其功能。與免費和開源Robot 3T相比,Studio 3T具有更多功能并提供企業(yè)支持。與Robo 3T相同,它也適用于Windows,Linux(Ubuntu和CentOS)和MacOS。
Mongo Management Studio是一個用于數(shù)據(jù)庫管理的免費MongoDB GUI工具。它輕巧,界面清晰,易于開發(fā)基于MongoDB的項目。它使用nodeJs,Electron框架,MongoDB和AngularJs開發(fā)。MMS與MongoDB 3.0/3.2/3.4兼容。
與上述所有MongoDB管理工具一樣,用戶可以輕松安裝它,但免費版僅適用于Windows;而企業(yè)和個人則適用于Linux,Windows和MacOS。企業(yè)版(Web服務(wù)器)支持MongoDB Web界面HTTP GUI,這意味著我們可以在主服務(wù)器上安裝,之后可以在本地或遠程使用瀏覽器的任何系統(tǒng)上訪問。但是,個人版和免費版只能在已安裝它們的本地系統(tǒng)上使用。
它是面向關(guān)系,NoSQL和云平臺的數(shù)據(jù)庫開發(fā)人員的通用集成開發(fā)環(huán)境(IDE)。因此,支持各種數(shù)據(jù)庫來開發(fā),訪問,管理和可視化分析數(shù)據(jù)。
對于MongoDB,Aqua Data Studio使用具有管理和數(shù)據(jù)庫查詢功能的圖形用戶界面作為管理工具。Aqua Data studio的Visual界面允許用戶瀏覽和修改數(shù)據(jù)庫結(jié)構(gòu),包括模式對象和集合,以及維護數(shù)據(jù)庫安全性。
它提供了一個MongoDB數(shù)據(jù)庫工具包,包括各種工具,如Visual Analytics,MongoSQL查詢參考,MongoJS查詢分析器,MongoShell MongoShell,F(xiàn)luidShell,查詢和分析工具,網(wǎng)格和數(shù)據(jù)透視圖,表數(shù)據(jù)編輯器,導(dǎo)入和導(dǎo)出工具,實體關(guān)系建模;Visual Query Builder;比較工具:架構(gòu)比較,文件比較;SQL 歷史 記錄,Open API腳本環(huán)境,集成安全Shell(SSH)和版本控制:Subversion(SVN),Git,CVS,Perforce。
MongoJS查詢分析器Javascript編輯器允許執(zhí)行JavaScript命令并支持自動完成和語法突出顯示。結(jié)果可以在樹層次結(jié)構(gòu),網(wǎng)格結(jié)果和文本中看到。
作為付費產(chǎn)品,Aqua Data Studio的試用版提供14天,具有所有企業(yè)功能。所以,如果你正在尋找一些付費產(chǎn)品,那么你可以在花錢之前免費試用它。它適用于Windows,Linux和MacOS。
這聽起來像phpMyAdmin工具。但是,phpMoAdmin也是PHP編寫的但是可用于MongoDB。它基于Vork PHP框架。很輕巧,易于安裝。它只有115KB的moadmin.php文件,用戶可以放在網(wǎng)站的任何地方開始工作。
它是一個跨平臺的MongoDB管理工具,在Open Source許可下發(fā)布,使用Electron框架和Angular JS構(gòu)建。可在GitHub上找到。
以上談到了Windows,Linux和MacOS MongoDB管理客戶端,所以那些正在尋找智能手機和平板電腦的用戶mongoDB管理可以試試Mongolime。它為MongoDB移動客戶端提供了輕松連接和訪問MongoDB服務(wù)器的功能。它具有內(nèi)置的SSH隧道,可以通過SSL輕松驗證和連接遠程服務(wù)器。MongoLime是免費增值MongoDB客戶端應(yīng)用程序,支持iOS和Android平臺。
使用Node.js,Express和Bootstrap3編寫的基于Web的MongoDB管理界面。它允許連接多個數(shù)據(jù)庫;查看/添加/刪除數(shù)據(jù)庫,集合和文檔;預(yù)覽音頻/視頻/圖像資產(chǎn);GridFS支持 - 添加/獲取/刪除難以置信的大文件;在文檔中使用BSON數(shù)據(jù)類型,Mobile / Responsive - Bootstrap以及更多功能。
package basic;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBC {
public void findAll() {
try {
// 獲得數(shù)據(jù)庫驅(qū)動
//由于長時間不寫,驅(qū)動名和URL都忘記了,不知道對不對,你應(yīng)該知道的,自己改一下的哈
String url = "jdbc:oracle:thin:@localhost:1521:XE";
String userName = "system";
String password = "system";
Class.forName("oracle.jdbc.driver.OracleDriver");
// 創(chuàng)建連接
Connection conn = DriverManager.getConnection(url, userName,
password);
// 新建發(fā)送sql語句的對象
Statement st = conn.createStatement();
// 執(zhí)行sql
String sql = "select * from users";
ResultSet rs = st.executeQuery(sql);
// 處理結(jié)果
while(rs.next()){
//這個地方就是給你的封裝類屬性賦值
System.out.println("UserName:"+rs.getString(0));
}
// 關(guān)閉連接
rs.close();
st.close();
conn.close();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void delete(){
try {
//步驟還是那六個步驟,前邊的兩步是一樣的
String url = "jdbc:oracle:thin:@localhost:1521:XE";
String userName = "system";
String password = "system";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection(url,userName,password);
//這里的發(fā)送sql語句的對象是PreparedStatement,成為預(yù)處理sql對象,因為按條件刪除是需要不定值的
String sql = "delete from users where id = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(0, 1);
int row = ps.executeUpdate();
if(row!=0){
System.out.println("刪除成功!");
}
// 關(guān)閉連接
rs.close();
st.close();
conn.close();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}