重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
NoSQL數據庫有很多種,實現方式差別很大。有接近SQL查詢方式的,也有純粹的鍵值對查詢。
成都創新互聯堅持“要么做到,要么別承諾”的工作理念,服務領域包括:網站設計制作、成都網站設計、企業官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯網時代的沽源網站設計、移動媒體設計的需求,幫助企業找到有效的互聯網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!
對于K-V型數據庫,比較典型的是Redis,系統提供了get、set之類的命令用于增刪改查。關鍵是鍵值對的鍵和值怎么設計。
一般將NoSQL數據庫分為四大類:鍵值(Key-Value)存儲數據庫、列存儲數據庫、文檔型數據庫和圖形(Graph)數據庫。它們的數據模型、優缺點、典型應用場景。
鍵值(Key-Value)存儲數據庫Key指向Value的鍵值對,通常用hash表來實現查找速度快數據無結構化(通常只被當作字符串或者二進制數據)內容緩存,主要用于處理大量數據的高訪問負載,也用于一些日志系統等。
列存儲數據庫,以列簇式存儲,將同一列數據存在一起查找速度快,可擴展性強,更容易進行分布式擴展功能相對局限分布式的文件系統。
文檔型數據庫,Key-Value對應的鍵值對,Value為結構化數據,數據結構要求不嚴格,表結構可變(不需要像關系型數據庫一樣需預先定義表結構),查詢性能不高,而且缺乏統一的查詢語法,Web應用。
圖形(Graph)數據庫,圖結構,利用圖結構相關算法(如最短路徑尋址,N度關系查找等),很多時候需要對整個圖做計算才能得出需要的信息,而且這種結構不太好做分布式的集群方案,社交網絡,推薦系統等。
每種nosql都有自己的語法。跟t-sql類數據庫的方式類似。但。不是用sql語句。而是他自身定義的讀取語句
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 {
// 獲得數據庫驅動
//由于長時間不寫,驅動名和URL都忘記了,不知道對不對,你應該知道的,自己改一下的哈
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);
// 新建發送sql語句的對象
Statement st = conn.createStatement();
// 執行sql
String sql = "select * from users";
ResultSet rs = st.executeQuery(sql);
// 處理結果
while(rs.next()){
//這個地方就是給你的封裝類屬性賦值
System.out.println("UserName:"+rs.getString(0));
}
// 關閉連接
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);
//這里的發送sql語句的對象是PreparedStatement,成為預處理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("刪除成功!");
}
// 關閉連接
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();
}
}
}
AWS推出了與SQL兼容的查詢語言PartiQL,只要數據庫查詢引擎提供PartiQL支持,使用者就能以PartiQL單一查詢關聯式數據庫的結構化資料,以及開放資料格式中的巢狀資料或是半結構化資料,甚至還能用來查詢NoSQL或是文件數據庫中無固定結構(Schema-less)的資料。除了AWS自家的數據庫服務,NoSQL數據庫Couchbase Server也承諾將會支持PartiQL。
企業資料分散在關聯式數據庫、非關聯式數據庫以及資料湖泊中。高度結構化的資料,儲存在SQL數據庫或是資料倉儲;無固定結構的資料則由鍵值儲存、圖形數據庫(Graph Database)、分類帳數據庫或是時間序列數據庫等NoSQL數據庫處理;而在資料湖泊中的資料,可能也有部分缺乏結構,或是可能為巢狀或是多值結構。不同的資料類型適用于不同的使用案例,而每種類型的資料,可能都有自己的查詢語言。
不同的資料儲存對應不同的查詢語言,當企業更換資料格式或是數據庫引擎時,可能還需要跟著改變應用程式和查詢語法,AWS提到,這對于資料的應用,特別是使用資料湖泊的靈活性與效率,有著很大的阻礙。為了統一不同類型數據庫存取方法,AWS發布了查詢語言PartiQL,這是個與SQL兼容的查詢語言,可以用來查詢以各種格式儲存在各地的資料。
用戶可以使用PartiQL來查詢關聯式數據庫,像是在Redshift實作交易或是資料分析等應用,或對于Amazon S3資料湖泊的開放資料格式,同樣能使用PartiQL對巢狀資料與半結構化資料例如Amazon Ion格式進行查詢,另外,PartiQL也可用于文件數據庫等NoSQL數據庫,查詢無固定結構的資料。
AWS表示,PartiQL的出現,是為了滿足自家查詢和轉換大量資料的需求,其提供嚴格的SQL兼容性,可與標準SQL混合使用,執行連接(Join)、過濾(Filtering)與聚合(Aggregation)操作,并以最小擴充支持巢狀和半結構化資料,讓開發者以簡單且一致的方法,不需要更改查詢語言,就能查詢各種格式和服務的資料。
PartiQL具格式獨立性與儲存獨立性,PartiQL語法和語義不依賴任何資料格式,無論使用者是要查詢JSON、Parquet、ORC、CSV還是Ion等格式,查詢語句的寫法都相同,PartiQL的查詢在綜合邏輯類型系統上運作,才對應到不同底層的格式。而PartiQL也不相依于特定資料儲存,因此適用于不同的底層資料儲存。
雖然過去針對跨不同類型數據庫查詢的問題,已有不少解決方案,AWS指出,像是Postgres JSON同樣也兼容于SQL,但是卻無法良好地處理JSON巢狀資料;而半結構化查詢語言,雖然能良好處理巢狀資料,但卻無法與SQL語言兼容。AWS提到,PartiQL是第一個能夠完全解決這些問題的查詢語言。
目前AWS已在自家多項服務支持PartiQL,包括Amazon S3 Select、Amazon Glacier Select、Amazon Redshift Spectrum、Amazon QLDB,接下來幾個月將會有更多的AWS服務支持PartiQL,Couchbase也公布將加入支持PartiQL的行列。現在PartiQL以Apache2.0授權許可開源,公開教學、規范以及參考實作,所有社群都能使用并參與貢獻。