国产91精品在线播放,欧美精品在线免费,日韩中文字幕在线有码视频网

上海校區(qū)切換校區(qū)
圖片

騰科動態(tài)

MySQL 文檔存儲介紹

發(fā)布時間: 2018-06-24

MySQL 文檔存儲 可以跳過底層數(shù)據(jù)結(jié)構(gòu)創(chuàng)建、數(shù)據(jù)規(guī)范化和其它使用傳統(tǒng)數(shù)據(jù)庫時需要做的工作,直接存儲數(shù)據(jù)。

MySQL 可以提供 NoSQL JSON 文檔存儲Document Store了,這樣開發(fā)者保存數(shù)據(jù)前無需規(guī)范化normalize數(shù)據(jù)、創(chuàng)建數(shù)據(jù)庫,也無需在開發(fā)之前就制定好數(shù)據(jù)樣式。從 MySQL 5.7 版本和 MySQL 8.0 版本開始,開發(fā)者可以在表的一列中存儲 JSON 文檔。由于引入 X DevAPI,你可以從你的代碼中移除令人不爽的結(jié)構(gòu)化查詢字符串,改為使用支持現(xiàn)代編程設(shè)計的 API 調(diào)用。

系統(tǒng)學(xué)習(xí)過結(jié)構(gòu)化查詢語言(SQL)、關(guān)系理論relational theory、集合set和其它關(guān)系數(shù)據(jù)庫底層理論的開發(fā)者并不多,但他們需要一個安全可靠的數(shù)據(jù)存儲。如果數(shù)據(jù)庫管理人員不足,事情很快就會變得一團(tuán)糟,

MySQL 文檔存儲[1] 允許開發(fā)者跳過底層數(shù)據(jù)結(jié)構(gòu)創(chuàng)建、數(shù)據(jù)規(guī)范化和其它使用傳統(tǒng)數(shù)據(jù)庫時需要做的工作,直接存儲數(shù)據(jù)。只需創(chuàng)建一個 JSON 文檔集合document collection,接著就可以使用了。

JSON 數(shù)據(jù)類型

所有這一切都基于多年前 MySQL 5.7 引入的 JSON 數(shù)據(jù)類型。它允許在表的一行中提供大約 1GB 大小的列。數(shù)據(jù)必須是有效的 JSON,否則服務(wù)器會報錯;但開發(fā)者可以自由使用這些空間。

X DevAPI

舊的 MySQL 協(xié)議已經(jīng)歷經(jīng)差不多四分之一個世紀(jì),已經(jīng)顯現(xiàn)出疲態(tài),因此新的協(xié)議被開發(fā)出來,協(xié)議名為 X DevAPI[2]。協(xié)議引入高級會話概念,允許代碼從單臺服務(wù)器擴(kuò)展到多臺,使用符合通用主機(jī)編程語言樣式common host-language programming patterns的非阻塞異步 I/O。需要關(guān)注的是如何遵循現(xiàn)代實踐和編碼風(fēng)格,同時使用 CRUD (Create、 Replace、 Update、 Delete)樣式。換句話說,你不再需要在你精美、純潔的代碼中嵌入丑陋的 SQL 語句字符串。

一個新的 shell 支持這種新協(xié)議,即所謂的 MySQL Shell[3]。該 shell 可用于設(shè)置高可用集群high-availability cluster、檢查服務(wù)器升級就緒狀態(tài)upgrade readiness以及與 MySQL 服務(wù)器交互。支持的交互方式有以下三種:JavaScript,Python 和 SQL。

代碼示例

下面的代碼示例基于 JavaScript 方式使用 MySQL Shell,可以從 JS> 提示符看出。

下面,我們將使用用戶 dstokes 、密碼 password 登錄本地系統(tǒng)上的 demo 庫。db 是一個指針,指向 demo 庫。

  1. $ mysqlsh dstokes:password@localhost/demo

  2. JS> db.createCollection("example")

  3. JS> db.example.add(

  4.       {

  5.         Name: "Dave",

  6.         State:  "Texas",

  7.         foo : "bar"

  8.       }

  9.      )

  10. JS>

在上面的示例中,我們登錄服務(wù)器,連接到 demo 庫,創(chuàng)建了一個名為 example 的集合,最后插入一條記錄;整個過程無需創(chuàng)建表,也無需使用 SQL。只要你能想象的到,你可以使用甚至濫用這些數(shù)據(jù)。這不是一種代碼對象與關(guān)系語句之間的映射器,因為并沒有將代碼映射為 SQL;新協(xié)議直接與服務(wù)器層打交道。

Node.js 支持

新 shell 看起來挺不錯,你可以用其完成很多工作;但你可能更希望使用你選用的編程語言。下面的例子使用 world_x 示例數(shù)據(jù)庫,搜索 _id 字段匹配 CAN. 的記錄。我們指定數(shù)據(jù)庫中的特定集合,使用特定參數(shù)調(diào)用 find 命令。同樣地,操作也不涉及 SQL。

  1. var mysqlx = require('@mysql/xdevapi');

  2. mysqlx.getSession({             //Auth to server

  3.         host: 'localhost',

  4.         port: '33060',

  5.         dbUser: 'root',

  6.         dbPassword: 'password'

  7. }).then(function (session) {    // use world_x.country.info

  8.      var schema = session.getSchema('world_x');

  9.      var collection = schema.getCollection('countryinfo');

  10. collection                      // Get row for 'CAN'

  11.   .find("$._id == 'CAN'")

  12.   .limit(1)

  13.   .execute(doc => console.log(doc))

  14.   .then(() => console.log("\n\nAll done"));

  15.   session.close();

  16. })

下面例子使用 PHP,搜索 _id 字段匹配 USA 的記錄:

  1. <?PHP

  2. // Connection parameters

  3.   $user = 'root';

  4.   $passwd = 'S3cret#';

  5.   $host = 'localhost';

  6.   $port = '33060';

  7.   $connection_uri = 'mysqlx://'.$user.':'.$passwd.'@'.$host.':'.$port;

  8.   echo $connection_uri . "\n";

  9. // Connect as a Node Session

  10.   $nodeSession = mysql_xdevapi\getNodeSession($connection_uri);

  11. // "USE world_x" schema

  12.   $schema = $nodeSession->getSchema("world_x");

  13. // Specify collection to use

  14.   $collection = $schema->getCollection("countryinfo");

  15. // SELECT * FROM world_x WHERE _id = "USA"

  16.   $result = $collection->find('_id = "USA"')->execute();

  17. // Fetch/Display data

  18.   $data = $result->fetchAll();

  19.   var_dump($data);

  20. ?>

可以看出,在上面兩個使用不同編程語言的例子中,find 操作符的用法基本一致。這種一致性對跨語言編程的開發(fā)者有很大幫助,對試圖降低新語言學(xué)習(xí)成本的開發(fā)者也不無裨益。

支持的語言還包括 C、Java、Python 和 JavaScript 等,未來還會有更多支持的語言。

從兩種方式受益

我會告訴你使用 NoSQL 方式錄入的數(shù)據(jù)也可以用 SQL 方式使用?換句話說,我會告訴你新引入的 NoSQL 方式可以訪問舊式關(guān)系型表中的數(shù)據(jù)?現(xiàn)在使用 MySQL 服務(wù)器有多種方式,作為 SQL 服務(wù)器,作為 NoSQL 服務(wù)器或者同時作為兩者。

?

上一篇: 入門MySQL數(shù)據(jù)庫導(dǎo)入與導(dǎo)出及重置root密碼

下一篇: 如何在 RHEL 中使用訂閱管理器啟用軟件倉庫

在線咨詢 ×

您好,請問有什么可以幫您?我們將竭誠提供最優(yōu)質(zhì)服務(wù)!

<menuitem id="vlare"></menuitem>

    <ul id="vlare"><rp id="vlare"><optgroup id="vlare"></optgroup></rp></ul>

  • 主站蜘蛛池模板: 桂阳县| 丰原市| 秭归县| 宝清县| 鹰潭市| 玉门市| 清流县| 惠东县| 望谟县| 钟祥市| 颍上县| 东光县| 大关县| 乐清市| 静安区| 晴隆县| 余干县| 贺兰县| 张家港市| 无极县| 来凤县| 中西区| 涡阳县| 紫阳县| 温泉县| 夹江县| 吴堡县| 彭水| 凉城县| 福清市| 安平县| 观塘区| 宁远县| 盐山县| 兰州市| 东乡县| 林芝县| 中西区| 财经| 顺平县| 宁城县|