亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

數(shù)據(jù)庫的本質(zhì)、概念及其應(yīng)用實(shí)踐(二)

int64 / 2269人閱讀

摘要:通過就可以看到這個(gè)文本數(shù)據(jù)庫的運(yùn)行的例子。有兩個(gè)特點(diǎn)目前已經(jīng)是非常流行的文件數(shù)據(jù)庫,尤其是嵌入式數(shù)據(jù)庫,在移動(dòng)應(yīng)用中也應(yīng)用得十分普遍。分別用即將廢棄的和以來操作數(shù)據(jù)庫。

三、各種數(shù)據(jù)庫的關(guān)系、實(shí)踐
3.1、自制簡單文本格式(甚至在PHP中,用數(shù)據(jù)保存配置)
A、比如有一個(gè)AngularJS的示例項(xiàng)目,就用json保存示例數(shù)據(jù)的格式。
![請(qǐng)輸入圖片描述][1]

B、PHP保存配置數(shù)據(jù)就更加常見了,TP就是一個(gè)典型。
![請(qǐng)輸入圖片描述][2]

3.2、文本數(shù)據(jù)庫(php text db api)

我們從 [http://www.c-worker.ch/txtdbapi/index.php#download][3] 下載了這個(gè)比較有名的 文本數(shù)據(jù)庫引擎。
文本數(shù)據(jù)的使用場景這些交待一下。
1、比如你的虛擬主機(jī),支持PHP,但是不支持MySQL ,也不支持SQLite的時(shí)候就可以發(fā)揮用場了。

下載了需要修改一下,
txt-db-api.php 的兩個(gè)配置。

$API_HOME_DIR=dirname(__FILE__).DIRECTORY_SEPARATOR;    
$DB_DIR=dirname(__FILE__).DIRECTORY_SEPARATOR;

通過 [http://samples.app.ucai.cn/20140603/phptxtdb/examples/addressbook.php?lang=de&char=M][3]
就可以看到這個(gè)文本數(shù)據(jù)庫的運(yùn)行的例子。
然后就可以看到結(jié)果保存了。
![請(qǐng)輸入圖片描述][4]

果真是文本不是?

3.3、SQLite 數(shù)據(jù)庫
SQLite 數(shù)據(jù)庫也是一個(gè)文件數(shù)據(jù)庫,但是不是文本數(shù)據(jù)庫。它是一種自有的二進(jìn)制格式。最早是由C寫的一個(gè)庫,并且很早也發(fā)布PHP的訪問擴(kuò)展,現(xiàn)在一般用的是sqlite3,PHP模塊名也叫sqlite3。
Sqlite 有兩個(gè)特點(diǎn):
1、目前已經(jīng)是非常流行的文件數(shù)據(jù)庫,尤其是嵌入式數(shù)據(jù)庫,在移動(dòng)應(yīng)用中也應(yīng)用得十分普遍。
2、其訪問的接口同 MySQL的非常地相似。
具體安裝很簡單,就是從官網(wǎng)下了代碼, make 就可以了,不過代碼可真不是一個(gè)小個(gè)。
3、SQLite3 已經(jīng)是屬于關(guān)系數(shù)據(jù)庫大家庭的一員,所以它遵循ACID。對(duì)于SQL語句的支持也不錯(cuò),網(wǎng)上也有人寫了它和SQL互相導(dǎo)入互出的代碼。
也有同MySQL 類似的管理工具,
[http://sourceforge.net/projects/sqlitemanager/][5]

大家可以搜索SQLite Manager 就能搜索到一堆。
至于具體的操作,不在這里展開,我們五月份的公開課,專門有一講講這個(gè)。將會(huì)比較詳細(xì)地講解SQLite 以及應(yīng)用。

3.4、MySQL 數(shù)據(jù)庫
MySQL 從使用上講,大家都比較熟悉了。但是值得注意的是,mysql_query 這樣的方法在php 5.5 時(shí)過時(shí)。
我們這里做三個(gè)簡單的例子。分別用即將廢棄的 mysql 和 mysqli 以 PDO 來操作數(shù)據(jù)庫。

第一個(gè)例子,是過程式地操作MySQL。用的是很普遍的數(shù)據(jù)庫操作函數(shù),也就是php mysql 擴(kuò)展的函數(shù)。這些函數(shù)將在 5.5版中過時(shí),所以我們要抓緊改變了。



// 這應(yīng)該由用戶提供,下面是一個(gè)示例
$name = "wxstars";
// 構(gòu)造查詢
// 這是執(zhí)行 SQL 最好的方式
// 更多例子參見 mysql_real_escape_string()

$query = sprintf("SELECT * FROM users 
    WHERE name="%s"",
    mysql_real_escape_string($name));

// 執(zhí)行查詢

$result = mysql_query($query);

// 檢查結(jié)果
// 下面顯示了實(shí)際發(fā)送給 MySQL 的查詢,以及出現(xiàn)的錯(cuò)誤。這對(duì)調(diào)試很有幫助。

if (!$result) {
    $message  = "Invalid query: " . mysql_error() . "
";
    $message .= "Whole query: " . $query;
    die($message);
}

// 結(jié)果的使用
// 嘗試 print $result 并不會(huì)取出結(jié)果資源中的信息
// 所以必須至少使用其中一個(gè) mysql 結(jié)果函數(shù)
// 參見 mysql_result(), mysql_fetch_array(), mysql_fetch_row() 等。

while ($row = mysql_fetch_assoc($result)) {
    echo $row["id"]."
";
    echo $row["name"]."
";
    echo $row["email"]."
";
}

// 釋放關(guān)聯(lián)結(jié)果集的資源
// 在腳本結(jié)束的時(shí)候會(huì)自動(dòng)進(jìn)行

mysql_free_result($result);
mysql_close($conn);
?>

第二個(gè)例子是過程式和面向?qū)ο蟮膍yqli操作數(shù)據(jù)庫的例子。



connect_errno) {
    printf("Connect failed: %s
", $mysqli->connect_error);
    exit();
}
 // 這應(yīng)該由用戶提供,下面是一個(gè)示例
$name = "wxstars";
// 構(gòu)造查詢
// 這是執(zhí)行 SQL 最好的方式
// 更多例子參見 mysql_real_escape_string()

$query = sprintf("SELECT * FROM users WHERE name="%s"",
    $mysqli->real_escape_string($name));

echo $query;
/* Select queries return a resultset */
if ($result = $mysqli->query($query)) {
    printf("Select returned %d rows.
", $result->num_rows);


    $row = $result->fetch_assoc();
    print_r($row);
    /* free result set */

    $result->close();
}


$mysqli->close();
?>

query($sql) as $row)
    {
        print $row["id"] . " - " . $row["name"] . " - " . $row["email"] . "
";
    }

    /*     * * close the database connection ** */
    $dbh = null;
} catch (PDOException $e)
{
    echo $e->getMessage();
}
?>


總結(jié),我們上面使用了三個(gè)不同的php 模塊,一個(gè)是php mysql,一個(gè)是mysqli,一個(gè)是 pdo_mysql 三個(gè)模塊來分別干同樣的事情。如果你多帶帶學(xué)習(xí)這三個(gè)庫,會(huì)覺得比較枯燥,當(dāng)你學(xué)到一定程度,融會(huì)貫通時(shí),特別是對(duì)比學(xué)習(xí)時(shí)發(fā)現(xiàn),你學(xué)習(xí)了其中一個(gè),學(xué)習(xí)其他的也就并不難了。無非就是如下幾步:

1、建立連接,在建立 連接時(shí)需要提交用戶名,密碼,主機(jī),庫名,端口等數(shù)據(jù)。
2、檢測連接是否建立成功。
3、組裝查詢,注意不同的模塊,對(duì)查詢組裝時(shí)的過濾方法也是不同的。
4、執(zhí)行查詢,獲得結(jié)果句柄,而不是直接的數(shù)據(jù)。
5、通過非常相近的函數(shù),從結(jié)果句柄中取得數(shù)據(jù)。
6、把數(shù)據(jù)放到結(jié)果句柄里輸出。
7、在離開程序時(shí),需要釋放結(jié)果集資源。
8、在最后,需要關(guān)系開啟的數(shù)據(jù)庫連接。

3.5、MySQL KVDB的一個(gè)插件
為什么要用這個(gè)插件,并演示這個(gè)插件,有幾個(gè)目的。

一,讓大家知道MySQL和KVDB,這些軟件之間,并沒有明顯的界限,像KVDB的出現(xiàn),只是它的處理能力更強(qiáng),而MySQL由于很多的限制,導(dǎo)致了在簡單的場景下,處理能力并不如KVDB強(qiáng)。并不是說不能做。

二、其實(shí)有人,將MySQL進(jìn)行改造,已達(dá)到了甚至超過 KVDB的一個(gè)高度。就是這個(gè)插件所做的,據(jù)說做到了 75萬QPS。并且是生產(chǎn)中可以使用的了,一些發(fā)行版均將這個(gè)模塊包含了進(jìn)去。
http://yoshinorimatsunobu.blogspot.com/2010/10/using-mysql-as-nosql-story-for.html

三、也讓大家了解一下MySQL插件的安裝。進(jìn)一步了解MySQL的強(qiáng)大 。

[https://github.com/DeNA/HandlerSocket-Plugin-for-MySQL][6]

wget https://github.com/DeNA/HandlerSocket-Plugin-for-MySQL/archive/master.zip -O HandlerSocket-Plugin-for-MySQL.zip

unzip HandlerSocket-Plugin-for-MySQL.zip

進(jìn)去目錄

cd HandlerSocket-Plugin-for-MySQL-master/

sh autogen.sh

./configure

發(fā)現(xiàn)出錯(cuò),要求連同mysql 的源碼目錄一起配置。

下載了一個(gè)5.5版的源碼,配置

./configure --with-mysql-source=../MySQL/mysql-5.5.37/

發(fā)現(xiàn)出錯(cuò)。

checking mysql binary... yes: Using /usr/bin/mysql_config, version 5.1.73
configure: error: MySQL source version does not match MySQL binary version

只好查看了一下版本,

[root@localhost HandlerSocket-Plugin-for-MySQL-master]# mysqladmin --version
mysqladmin  Ver 8.42 Distrib 5.1.73, for redhat-linux-gnu on x86_64

發(fā)現(xiàn)是5.1.73 的版本
于是乎下了一個(gè)5.1.73 的源碼。
成功配置,
./configure --with-mysql-source=../MySQL/mysql-5.1.73/

然后
make
make install

成功安裝。下面再在mysql 中啟用

mysql –uroot –p

執(zhí)行 install plugin handlersocket soname "handlersocket.so"; 安裝插件。
![請(qǐng)輸入圖片描述][7]

插件成功安裝。
再在
/etc/my.cnf 的 [mysqld] 版塊下加入

loose_handlersocket_port    = 9998
loose_handlersocket_port_wr    = 9999
loose_handlersocket_threads    = 4
loose_handlersocket_threads_wr  = 1
loose_handlersocket_address    = [你要監(jiān)聽的IP地址]

然后重啟 mysqld
再show processlist
![請(qǐng)輸入圖片描述][8]

我們看到,已經(jīng)成功運(yùn)行,再netstat看一眼。
![請(qǐng)輸入圖片描述][9]

端口監(jiān)聽成功。

說明,此插件在MySQL的另一個(gè)發(fā)行版 Percona Server中已包含。
[http://www.mysqlperformanceblog.com/2010/12/14/percona-server-now-both-sql-and-nosql/][10]

我們來使用它的 PHP 客戶端來測試一下。

下載:

[https://code.google.com/p/php-handlersocket/downloads/detail?name=php-handlersocket-0.3.1.tar.gz&can=2&q=][11]

安裝模塊。

新建測試代碼。
新建表格

create database hstestdb;

CREATE TABLE `hstesttbl` (
  `k` int(11) NOT NULL AUTO_INCREMENT,
  `v` char(255) NOT NULL DEFAULT "",
  PRIMARY KEY (`k`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

openIndex(1, $dbname, $table, HandlerSocket::PRIMARY, "k,v")))
{
    echo $hs->getError(), PHP_EOL;
    echo "get Error!
";
    die();
}

$retval = $hs->executeSingle(1, "=", array("k1"), 1, 0);

var_dump($retval);

$retval = $hs->executeMulti(
    array(array(1, "=", array("k1"), 1, 0),
          array(1, "=", array("k2"), 1, 0)));

var_dump($retval);

unset($hs);


//UPDATE
$hs = new HandlerSocket($host, $port_wr);
if (!($hs->openIndex(2, $dbname, $table, "", "v")))
{
    echo $hs->getError(), PHP_EOL;
    die();
}

if ($hs->executeUpdate(2, "=", array("k1"), array("V1"), 1, 0) === false)
{
    echo $hs->getError(), PHP_EOL;
    die();
}

unset($hs);


//INSERT
$hs = new HandlerSocket($host, $port_wr);
if (!($hs->openIndex(3, $dbname, $table, "", "k,v")))
{
    echo $hs->getError(), PHP_EOL;
    die();
}

if ($hs->executeInsert(3, array("k2", "v2")) === false)
{
    echo $hs->getError(), PHP_EOL;
}
if ($hs->executeInsert(3, array("k3", "v3")) === false)
{
    echo "A", $hs->getError(), PHP_EOL;
}
if ($hs->executeInsert(3, array("k4", "v4")) === false)
{
    echo "B", $hs->getError(), PHP_EOL;
}

unset($hs);


//DELETE
$hs = new HandlerSocket($host, $port_wr);
if (!($hs->openIndex(4, $dbname, $table, "", "")))
{
    echo $hs->getError(), PHP_EOL;
    die();
}

if ($hs->executeDelete(4, "=", array("k2")) === false)
{
    echo $hs->getError(), PHP_EOL;
    die();
}

3.6、全文檢索
全文檢索是不一個(gè)不同于數(shù)據(jù)檢索的領(lǐng)域。有幾個(gè)特點(diǎn):
A、精確的數(shù)據(jù)庫查詢,無論是在順序,還是在數(shù)據(jù)結(jié)構(gòu)上都是非常地確定的。
B、全文檢索一般面向大數(shù)據(jù)量,所以查詢結(jié)果,在順序上和結(jié)果上,都不是需要達(dá)到 100%精確,當(dāng)然也有一些技術(shù)指標(biāo)來衡量向著最好的方向前進(jìn)。
C、精確查詢所查詢的內(nèi)容,一般是數(shù)字型的比較或者是前置匹配等。
D、全文檢索所查的內(nèi)容,往往是一段文字中的一個(gè)或者多個(gè)詞。所以只查文本型的數(shù)據(jù)。
E、精確查詢往往隨著數(shù)據(jù)量的記錄數(shù)到了一定程度,如果是針對(duì)文本的查詢,整個(gè)速度會(huì)下降比較明顯。
F、而全文檢索一般,隨著數(shù)據(jù)量的增長,下降不能那么明顯。

全文檢索在PHP中有三種實(shí)現(xiàn)方式,一是用MySQL 的MyISAM引擎的全文檢索功能 。二是使用同MySQL結(jié)合緊密的 Sphinx。三是使用較為專業(yè)的全文檢索引擎,Lucene。而用Slor來實(shí)現(xiàn)量詢。

下載solr
wget -c http://mirrors.cnnic.cn/apache/lucene/solr/4.8.1/solr-4.8.1.zip

cd solr-4.8.1/example
java –jar start.jar

按教程建立好索引:
[http://lucene.apache.org/solr/4_8_1/tutorial.html][12]

[http://101.251.196.91:8983/solr/collection1/select?q=%E6%9C%8D%E5%8A%A1][13]

PHP模塊下載:
[http://pecl.php.net/package/solr][14]

 "localhost",
  //  "login"    => "username",
  //  "password" => "password",
    "port"     => "8983",
);

$client = new SolrClient($options);

$query = new SolrQuery();

$query->setQuery("服務(wù)器");

$query->setStart(0);

$query->setRows(50);

$query->addField("cat")->addField("features")->addField("id")->addField("timestamp");

$query_response = $client->query($query);

$response = $query_response->getResponse();

print_r($response);

?>

四、課程總結(jié)
通過上面的這一節(jié)課,我們站在一個(gè)比較高的高度討論了數(shù)據(jù)庫的出現(xiàn)和應(yīng)用場景 。其次,從實(shí)用和學(xué)術(shù)兩方面,探討了一些常用的術(shù)語和概念。第三,就是通過實(shí)例,分別講解了不同情況下,對(duì)數(shù)據(jù)庫的不同的使用情況。希望這一講給大家指出一些基本的概念,能讓大家對(duì)繼續(xù)參與下面的課程有利。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/17450.html

相關(guān)文章

  • 數(shù)據(jù)庫本質(zhì)概念及其應(yīng)用實(shí)踐(一)

    摘要:今天這堂課,分為三個(gè)大點(diǎn),正如標(biāo)題所指出的,是討論數(shù)據(jù)的本質(zhì)概念與應(yīng)用實(shí)踐。采用一些文件型數(shù)據(jù)庫,比如支持訪問的文本數(shù)據(jù)庫,比如比如除了特定的數(shù)據(jù)類型,一般也只保存文本描述數(shù)據(jù)。上面的場景,大多是結(jié)構(gòu)化數(shù)據(jù)的處理場景,像文本數(shù)據(jù)庫數(shù)據(jù)庫。 今天這堂課,分為三個(gè)大點(diǎn),正如標(biāo)題所指出的,是討論數(shù)據(jù)的本質(zhì)、概念與應(yīng)用實(shí)踐。第一點(diǎn)本質(zhì)的探討是站在一個(gè)更高的高度來分析數(shù)據(jù)的產(chǎn)生以及各種使用場景,...

    William_Sang 評(píng)論0 收藏0
  • 云原生機(jī)制三個(gè)核心思想及其未來之路

    摘要:事實(shí)上,這種快捷的發(fā)布周期需要配合一系列流程工具甚至是管理文化,從而共同支撐起一套安全且可靠的云原生應(yīng)用程序運(yùn)作機(jī)制。云原生框架云原生應(yīng)用程序的一大關(guān)鍵性特質(zhì)在于,其需要遵循一套設(shè)計(jì)契約以較大程度實(shí)現(xiàn)行為的可預(yù)測性。 擺脫臨時(shí)性自動(dòng)化方案之定位,發(fā)揮優(yōu)勢以實(shí)現(xiàn)可預(yù)測功能。您能否以每周為單位向客戶發(fā)布各類新功能?甚至進(jìn)一步達(dá)到以每天乃至每小時(shí)為單位?新晉開發(fā)人員能否在上班的第一天即進(jìn)行代碼部署...

    陳偉 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<