真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

nosql增刪改查,nosql增刪改查語(yǔ)句

nosql 怎么用?在關(guān)系數(shù)據(jù)庫(kù)中可以通過(guò) select 語(yǔ)句查詢,但是在nosql中怎么用這個(gè)了,難道只能存儲(chǔ)鍵值對(duì)?

NoSQL數(shù)據(jù)庫(kù)有很多種,實(shí)現(xiàn)方式差別很大。有接近SQL查詢方式的,也有純粹的鍵值對(duì)查詢。

公司主營(yíng)業(yè)務(wù):成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)建站推出林口免費(fèi)做網(wǎng)站回饋大家。

對(duì)于K-V型數(shù)據(jù)庫(kù),比較典型的是Redis,系統(tǒng)提供了get、set之類的命令用于增刪改查。關(guān)鍵是鍵值對(duì)的鍵和值怎么設(shè)計(jì)。

怎樣操作leveldb數(shù)據(jù)庫(kù),實(shí)現(xiàn)增刪改查

下文例子中演示了如何插入、獲取、刪除一條記錄

LevelDB 簡(jiǎn)介

一、LevelDB入門

LevelDB是Google開(kāi)源的持久化KV單機(jī)數(shù)據(jù)庫(kù),具有很高的隨機(jī)寫(xiě),順序讀/寫(xiě)性能,但是隨機(jī)讀的性能很一般,也就是說(shuō),LevelDB很適合應(yīng)用在查詢較少,而寫(xiě)很多的場(chǎng)景。LevelDB應(yīng)用了LSM (Log Structured Merge) 策略,lsm_tree對(duì)索引變更進(jìn)行延遲及批量處理,并通過(guò)一種類似于歸并排序的方式高效地將更新遷移到磁盤,降低索引插入開(kāi)銷,關(guān)于LSM,本文在后面也會(huì)簡(jiǎn)單提及。

根據(jù)LevelDB官方網(wǎng)站的描述,LevelDB的特點(diǎn)和限制如下:

特點(diǎn):

1、key和value都是任意長(zhǎng)度的字節(jié)數(shù)組;

2、entry(即一條K-V記錄)默認(rèn)是按照key的字典順序存儲(chǔ)的,當(dāng)然開(kāi)發(fā)者也可以重載這個(gè)排序函數(shù);

3、提供的基本操作接口:Put()、Delete()、Get()、Batch();

4、支持批量操作以原子操作進(jìn)行;

5、可以創(chuàng)建數(shù)據(jù)全景的snapshot(快照),并允許在快照中查找數(shù)據(jù);

6、可以通過(guò)前向(或后向)迭代器遍歷數(shù)據(jù)(迭代器會(huì)隱含的創(chuàng)建一個(gè)snapshot);

7、自動(dòng)使用Snappy壓縮數(shù)據(jù);

8、可移植性;

限制:

1、非關(guān)系型數(shù)據(jù)模型(NoSQL),不支持sql語(yǔ)句,也不支持索引;

2、一次只允許一個(gè)進(jìn)程訪問(wèn)一個(gè)特定的數(shù)據(jù)庫(kù);

3、沒(méi)有內(nèi)置的C/S架構(gòu),但開(kāi)發(fā)者可以使用LevelDB庫(kù)自己封裝一個(gè)server;

LevelDB本身只是一個(gè)lib庫(kù),在源碼目錄make編譯即可,然后在我們的應(yīng)用程序里面可以直接include leveldb/include/db.h頭文件,該頭文件有幾個(gè)基本的數(shù)據(jù)庫(kù)操作接口,下面是一個(gè)測(cè)試?yán)樱?/p>

#include iostream

#include string

#include assert.h

#include "leveldb/db.h"

using namespace std;

int main(void)

{

leveldb::DB *db;

leveldb::Options options;

options.create_if_missing = true;

// open

leveldb::Status status = leveldb::DB::Open(options,"/tmp/testdb", db);

assert(status.ok());

string key = "name";

string value = "chenqi";

// write

status = db-Put(leveldb::WriteOptions(), key, value);

assert(status.ok());

// read

status = db-Get(leveldb::ReadOptions(), key, value);

assert(status.ok());

coutvalueendl;

// delete

status = db-Delete(leveldb::WriteOptions(), key);

assert(status.ok());

status = db-Get(leveldb::ReadOptions(),key, value);

if(!status.ok()) {

cerrkey" "status.ToString()endl;

} else {

coutkey"==="valueendl;

}

// close

delete db;

return 0;

}

上面的例子演示了如何插入、獲取、刪除一條記錄,編譯代碼:

g++ -o test test.cpp libleveldb.a -lpthread -Iinclude

執(zhí)行./test后,會(huì)在/tmp下面生成一個(gè)目錄testdb,里面包含若干文件:

------------------------------------------------------------

LevelDB是google開(kāi)源的一個(gè)key-value存儲(chǔ)引擎庫(kù),類似于開(kāi)源的Lucene索引庫(kù)一樣。其他的軟件開(kāi)發(fā)者可以利用該庫(kù)做二次開(kāi)發(fā),來(lái)滿足定制需求。LevelDB采用日志式的寫(xiě)方式來(lái)提高寫(xiě)性能,但是犧牲了部分讀性能。為了彌補(bǔ)犧牲了的讀性能,一些人提議使用SSD作為存儲(chǔ)介質(zhì)。

對(duì)于本地化的Key-value存儲(chǔ)引擎來(lái)說(shuō),簡(jiǎn)單的使用一般都分成三個(gè)基本的步驟:(1)打開(kāi)一個(gè)數(shù)據(jù)庫(kù)實(shí)例;(2)對(duì)這個(gè)數(shù)據(jù)庫(kù)實(shí)例進(jìn)行插入,修改和查詢操作;(3)最后在使用完成之后,關(guān)閉該數(shù)據(jù)庫(kù)。下面將詳細(xì)討論該三個(gè)步驟:

一、打開(kāi)一個(gè)數(shù)據(jù)庫(kù)實(shí)例

一個(gè)leveldb數(shù)據(jù)庫(kù)有一個(gè)對(duì)應(yīng)一個(gè)文件系統(tǒng)目錄的名字。該數(shù)據(jù)庫(kù)的所有內(nèi)容都存儲(chǔ)在這個(gè)目錄下。下面的代碼描述了怎樣打開(kāi)一個(gè)數(shù)據(jù)庫(kù)或者建立一個(gè)新的數(shù)據(jù)庫(kù)。

#include assert.h

#include "leveldb/db.h"

leveldb::DB* db;

leveldb::Options options;

options.create_if_missing = true;

leveldb::Status status = leveldb::DB::Open(options,"/tmp/testdb", db);

assert(status.ok());

如果打開(kāi)已存在數(shù)據(jù)庫(kù)的時(shí)候,需要拋出錯(cuò)誤。將以下代碼插在leveldb::DB::Open方法前面:

options.error_if_exists = true;

二、對(duì)數(shù)據(jù)庫(kù)的簡(jiǎn)單讀、寫(xiě)操作

LevelDB提供了Put,Delete和Get三個(gè)方法對(duì)數(shù)據(jù)庫(kù)進(jìn)行修改和查詢。例如,下面的代碼片段描述了怎樣將key1對(duì)應(yīng)的value值,移到key2對(duì)應(yīng)的值。

std::string value;

leveldb::Status s = db-Get(leveldb::ReadOptions(), key1, value);

if(s.ok()) s = db-Put(leveldb::WriteOptions(), key2, value);

if(s.ok()) s = db-Delete(leveldb::WriteOptions(), key1);

三、關(guān)閉數(shù)據(jù)庫(kù)

在對(duì)數(shù)據(jù)庫(kù)進(jìn)行了一系列的操作之后,需要對(duì)數(shù)據(jù)庫(kù)進(jìn)行關(guān)閉。該操作比較簡(jiǎn)單:

... open the db as described above...

... do something with db ...

delete db;

上面對(duì)levelDB的簡(jiǎn)單使用做了基本的介紹,接下來(lái)就是如何自己寫(xiě)一個(gè)完成并且能運(yùn)行的例子。

1、下載源碼 git clone

2、編譯源碼 cd leveldb make all

3、編寫(xiě)test.cpp

#include assert.h

#include string.h

#include leveldb/db.h

#include iostream

int main(){

leveldb::DB* db;

leveldb::Options options;

options.create_if_missing = true;

leveldb::Status status = leveldb::DB::Open(options,"/tmp/testdb", db);

assert(status.ok());

//write key1,value1

std::string key="key";

std::string value = "value";

status = db-Put(leveldb::WriteOptions(), key,value);

assert(status.ok());

status = db-Get(leveldb::ReadOptions(), key, value);

assert(status.ok());

std::coutvaluestd::endl;

std::string key2 = "key2";

//move the value under key to key2

status = db-Put(leveldb::WriteOptions(),key2,value);

assert(status.ok());

status = db-Delete(leveldb::WriteOptions(), key);

assert(status.ok());

status = db-Get(leveldb::ReadOptions(),key2, value);

assert(status.ok());

std::coutkey2"==="valuestd::endl;

status = db-Get(leveldb::ReadOptions(),key, value);

if(!status.ok()) std::cerrkey" "status.ToString()std::endl;

else std::coutkey"==="valuestd::endl;

delete db;

return 0;

}

4、編譯鏈接 g++ -o test test.cpp ../leveldb/libleveldb.a -lpthread -I../leveldb/include

注意libleveldb.a 和leveldb include的路徑。

5、運(yùn)行結(jié)果./test:

value

key2===value

key NotFound:

NoSQL如何實(shí)現(xiàn)數(shù)據(jù)的增刪改查?

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ù)庫(kù)驅(qū)動(dòng)

//由于長(zhǎng)時(shí)間不寫(xiě),驅(qū)動(dòng)名和URL都忘記了,不知道對(duì)不對(duì),你應(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語(yǔ)句的對(duì)象

Statement st = conn.createStatement();

// 執(zhí)行sql

String sql = "select * from users";

ResultSet rs = st.executeQuery(sql);

// 處理結(jié)果

while(rs.next()){

//這個(gè)地方就是給你的封裝類屬性賦值

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 {

//步驟還是那六個(gè)步驟,前邊的兩步是一樣的

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語(yǔ)句的對(duì)象是PreparedStatement,成為預(yù)處理sql對(duì)象,因?yàn)榘礂l件刪除是需要不定值的

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();

}

}

}

nosql數(shù)據(jù)庫(kù)庫(kù)和sql數(shù)據(jù)庫(kù)的區(qū)別

一、概念

SQL?(Structured?Query?Language)?數(shù)據(jù)庫(kù),指關(guān)系型數(shù)據(jù)庫(kù)。主要代表:SQL?Server,Oracle,MySQL(開(kāi)源),PostgreSQL(開(kāi)源)。

NoSQL(Not?Only?SQL)泛指非關(guān)系型數(shù)據(jù)庫(kù)。主要代表:MongoDB,Redis,CouchDB。

二、區(qū)別

1、存儲(chǔ)方式

SQL數(shù)據(jù)存在特定結(jié)構(gòu)的表中;而NoSQL則更加靈活和可擴(kuò)展,存儲(chǔ)方式可以省是JSON文檔、哈希表或者其他方式。SQL通常以數(shù)據(jù)庫(kù)表形式存儲(chǔ)數(shù)據(jù)。舉個(gè)栗子,存?zhèn)€學(xué)生借書(shū)數(shù)據(jù):

而NoSQL存儲(chǔ)方式比較靈活,比如使用類JSON文件存儲(chǔ)上表中熊大的借閱數(shù)據(jù):

2、表/數(shù)據(jù)集合的數(shù)據(jù)的關(guān)系

在SQL中,必須定義好表和字段結(jié)構(gòu)后才能添加數(shù)據(jù),例如定義表的主鍵(primary?key),索引(index),觸發(fā)器(trigger),存儲(chǔ)過(guò)程(stored?procedure)等。表結(jié)構(gòu)可以在被定義之后更新,但是如果有比較大的結(jié)構(gòu)變更的話就會(huì)變得比較復(fù)雜。在NoSQL中,數(shù)據(jù)可以在任何時(shí)候任何地方添加,不需要先定義表。例如下面這段代碼會(huì)自動(dòng)創(chuàng)建一個(gè)新的"借閱表"數(shù)據(jù)集合:

NoSQL也可以在數(shù)據(jù)集中建立索引。以MongoDB為例,會(huì)自動(dòng)在數(shù)據(jù)集合創(chuàng)建后創(chuàng)建唯一值_id字段,這樣的話就可以在數(shù)據(jù)集創(chuàng)建后增加索引。

從這點(diǎn)來(lái)看,NoSQL可能更加適合初始化數(shù)據(jù)還不明確或者未定的項(xiàng)目中。

3、外部數(shù)據(jù)存儲(chǔ)

SQL中如何需要增加外部關(guān)聯(lián)數(shù)據(jù)的話,規(guī)范化做法是在原表中增加一個(gè)外鍵,關(guān)聯(lián)外部數(shù)據(jù)表。例如需要在借閱表中增加審核人信息,先建立一個(gè)審核人表:

再在原來(lái)的借閱人表中增加審核人外鍵:

這樣如果我們需要更新審核人個(gè)人信息的時(shí)候只需要更新審核人表而不需要對(duì)借閱人表做更新。而在NoSQL中除了這種規(guī)范化的外部數(shù)據(jù)表做法以外,我們還能用如下的非規(guī)范化方式把外部數(shù)據(jù)直接放到原數(shù)據(jù)集中,以提高查詢效率。缺點(diǎn)也比較明顯,更新審核人數(shù)據(jù)的時(shí)候?qū)?huì)比較麻煩。

4、SQL中的JOIN查詢

SQL中可以使用JOIN表鏈接方式將多個(gè)關(guān)系數(shù)據(jù)表中的數(shù)據(jù)用一條簡(jiǎn)單的查詢語(yǔ)句查詢出來(lái)。NoSQL暫未提供類似JOIN的查詢方式對(duì)多個(gè)數(shù)據(jù)集中的數(shù)據(jù)做查詢。所以大部分NoSQL使用非規(guī)范化的數(shù)據(jù)存儲(chǔ)方式存儲(chǔ)數(shù)據(jù)。

5、數(shù)據(jù)耦合性

SQL中不允許刪除已經(jīng)被使用的外部數(shù)據(jù),例如審核人表中的"熊三"已經(jīng)被分配給了借閱人熊大,那么在審核人表中將不允許刪除熊三這條數(shù)據(jù),以保證數(shù)據(jù)完整性。而NoSQL中則沒(méi)有這種強(qiáng)耦合的概念,可以隨時(shí)刪除任何數(shù)據(jù)。

6、事務(wù)

SQL中如果多張表數(shù)據(jù)需要同批次被更新,即如果其中一張表更新失敗的話其他表也不能更新成功。這種場(chǎng)景可以通過(guò)事務(wù)來(lái)控制,可以在所有命令完成后再統(tǒng)一提交事務(wù)。而NoSQL中沒(méi)有事務(wù)這個(gè)概念,每一個(gè)數(shù)據(jù)集的操作都是原子級(jí)的。

7、增刪改查語(yǔ)法

8、查詢性能

在相同水平的系統(tǒng)設(shè)計(jì)的前提下,因?yàn)镹oSQL中省略了JOIN查詢的消耗,故理論上性能上是優(yōu)于SQL的。

sql增刪改查基本語(yǔ)法

sql增刪改查基本語(yǔ)法如下:

1、“INSERT?INTO”語(yǔ)句,用于向表格中增加新的行。

2、“DELETE”語(yǔ)句,用于刪除表中的行。

3、“Update”語(yǔ)句,用于修改表中的數(shù)據(jù)。

4、“SELECT”語(yǔ)句,用于從表中選取數(shù)據(jù)。

sql語(yǔ)言特點(diǎn):

SQL可以獨(dú)立完成數(shù)據(jù)庫(kù)生命周期中的全部活動(dòng),包括定義關(guān)系模式、錄入數(shù)據(jù)、建立數(shù)據(jù)庫(kù)、查詢、更新、維護(hù)、數(shù)據(jù)庫(kù)重構(gòu)、數(shù)據(jù)庫(kù)安全性控制等一系列操作,這就為數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開(kāi)發(fā)提供了良好的環(huán)境,在數(shù)據(jù)庫(kù)投入運(yùn)行后,還可根據(jù)需要隨時(shí)逐步修改模式,且不影響數(shù)據(jù)庫(kù)的運(yùn)行,從而使系統(tǒng)具有良好的可擴(kuò)充性。


文章題目:nosql增刪改查,nosql增刪改查語(yǔ)句
文章源于:http://weahome.cn/article/dssedpg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部