21.26 mongodb介紹
21.27 mongodb安裝
21.28 鏈接mongodb
21.29 mongodb用戶管理
21.30 mongodb建立集合、數據管理
21.31 php的mongodb擴展
21.32 php的mongo擴展
21.33 mongodb副本集介紹
21.34 mongodb副本集搭建
21.35 mongodb副本集測試
21.36 mongodb分片介紹
21.37/21.38/21.39 mongodb分片搭建
21.40 mongodb分片測試
21.41 mongodb備份恢復
擴展內容
mongodb安全設置 http://www.mongoing.com/archives/631
mongodb執行js腳本 http://www.jianshu.com/p/6bd8934bd1caphp
1、mongodb介紹html
官網www.mongodb.com C++編寫,基於分佈式的,屬於NoSQL的一種,文檔型的數據庫 在NoSQL中mongodb是最像關係型數據庫的 MongoDB 將數據存儲爲一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔相似於 JSON 對象。字段值能夠包含其餘文檔、數組及文檔數組。 由於基於分佈式,因此很容易擴展 關於JSON http://www.w3school.com.cn/json/index.asp JSON:JavaScript 對象表示法(JavaScript Object Notation)。 JSON 是存儲和交換文本信息的語法。相似 XML。 JSON 比 XML 更小、更快,更易解析。
MongoDB和關係型數據庫對比linux
關係型數據庫數據結構nginx
MongoDB數據結構git
2、MongoDB安裝github
epel自帶的mongodb版本爲2.6,咱們須要安裝3.4版本
官方安裝文檔可參考: https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/web
cd /etc/yum.repos.d/ vim mongodb.repo //建立,並加入以下內容 [mongodb-org-3.4] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc yum list |grep mongodb //能夠看到mongodb相關的rpm包 yum install -y mongodb-org
3、MongoDB鏈接sql
配置文件 : vim /etc/mongod.confmongodb
綁定多個ip,用逗號分隔shell
systemctl start mongod //啓動服務
在本機能夠直接運行命令mongo進入到mongodb shell中
若是mongodb監聽端口並非默認的27017,則在鏈接的時候須要加--port 選項,例如
mongo --port 27018
鏈接遠程mongodb,須要加--host,例如
mongo --host 127.0.0.1
若是設置了驗證,則在鏈接的時候須要帶用戶名和密碼
mongo -uusername -ppasswd --authenticationDatabase 數據庫名 //這個和MySQL挺像
4、MongoDB用戶管理
(1)MongoDB庫管理
db.version() //查看版本 use userdb //若是庫存在就切換,不存在就建立 show dbs //查看庫,此時userdb並無出現,這是由於該庫是空的,尚未任何集合,只須要建立一個集合就能看到了 db.createCollection('clo1') //建立集合clo1,在當前庫下面建立 db.dropDatabase() //刪除當前庫,要想刪除某個庫,必須切換到那個庫下 db.stats() //查看當前庫的信息 db.serverStatus() //查看mongodb服務器的狀態
(2)給用戶設置密碼:
use admin //須要切換到admin庫 db.createUser( { user: "admin", customData: {description: "superuser"}, pwd: "admin123", roles: [ { role: "root", db: "admin" } ] } ) user指定用戶,customData爲說明字段,能夠省略,pwd爲密碼,roles指定用戶的角色,db指定庫名
use admin //切換到admin庫 db.system.users.find() //列出全部用戶,須要切換到admin庫 show users //查看當前庫下全部的用戶
在建立一個用戶: db.createUser({user:"tobe",pwd:"123456",roles:[{role:"read",db:"testdb"}]}) db.dropUser('tobe') //刪除用戶
use 庫名 切換到指定庫,若是庫不存在,會建立該庫
使用用戶名和密碼登錄,還須要編輯啓動腳本: vim /usr/lib/systemd/system/mongod.service,在OPTIONS=後面增--auth
systemctl daemon-reload 重啓服務 systemctl restart mongod
此時不使用用戶名密碼登錄會報錯,沒有受權
登錄後便可:
mongo --host 192.168.183.3 --port 27017 -u admin -p 'admin123' --authenticationDatabase "admin"
use db1 db.createUser( { user: "test1", pwd: "123aaa", roles: [ { role: "readWrite", db: "db1" }, {role: "read", db: "db2" } ] } ) test1用戶對db1庫讀寫,對db2庫只讀。 之因此先use db1,表示用戶在 db1 庫中建立,就必定要db1庫驗證身份,即用戶的信息跟隨隨數據庫。好比上述 test1雖然有 db2 庫的讀取權限,可是必定要先在db1庫進行身份驗證,直接訪問會提示驗證失敗。 此時驗證身份報錯,是由於test1用戶是db1中的,要到db1中才能夠
(3)MongoDB用戶角色
Read:容許用戶讀取指定數據庫 readWrite:容許用戶讀寫指定數據庫 dbAdmin:容許用戶在指定數據庫中執行管理函數,如索引建立、刪除,查看統計或訪問system.profile userAdmin:容許用戶向system.users集合寫入,能夠找指定數據庫裏建立、刪除和管理用戶 clusterAdmin:只在admin數據庫中可用,賦予用戶全部分片和複製集相關函數的管理權限。 readAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的讀權限 readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的讀寫權限 userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的userAdmin權限 dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的dbAdmin權限。 root:只在admin數據庫中可用。超級帳號,超級權限
5、mongodb建立集合、數據管理
建立集合:
db.createCollection("mycol", { capped : true, size : 6142800, max : 10000 } ) //語法:db.createCollection(name,options) name就是集合的名字,options可選,用來配置集合的參數,參數以下: capped true/false 是否封頂,(可選)若是爲true,則啓用封頂集合。封頂集合是固定大小的集合,當它達到其最大大小,會自動覆蓋最先的條目。若是指定true,則也須要指定尺寸參數。 autoindexID true/false 是否自動建立索引,(可選)若是爲true,自動建立索引_id字段的默認值是false。 size (可選)指定最大大小字節封頂集合。若是封頂若是是 true,那麼你還須要指定這個字段。單位B max (可選)指定封頂集合容許在文件的最大數量。
db1庫有讀寫權限,db2只能讀
數據管理:
show collections //查看集合,或者使用show tables db.Account.insert({AccountID:1,UserName:"123",password:"123456"}) //Account爲集合,若是集合不存在,直接插入數據,則mongodb會自動建立集合 db.Account.update({AccountID:1},{"$set":{"Age":20}}) //更新,填加一個age字段 db.Account.find() //查看全部文檔
db.Account.find({AccountID:1}) //根據條件查詢 db.Account.remove({AccountID:1}) //根據條件刪除 db.Account.drop() //刪除全部文檔,即刪除集合 db.mycol.drop() 刪除mycol db.printCollectionStats() // 而後查看集合狀態
6、PHP的mongodb擴展
mongodb.so
針對不一樣狀況使用mongodb.so或mongo.so
mongodb.so兩種安裝方法 方法一: 能夠到pecl官網上下載mongodb的擴展源碼包 cd /usr/local/src/ wget https://pecl.php.net/get/mongodb-1.3.0.tgz tar zxvf mongodb-1.3.0.tgz cd mongodb-1.3.0 /usr/local/php-fpm/bin/phpize ./configure --with-php-config=/usr/local/php-fpm/bin/php-config make && make install 會生成mongodb.so vim /usr/local/php-fpm/etc/php.ini //增長 extension = mongodb.so /usr/local/php-fpm/bin/php -m /etc/init.d/php-fpm restart
方法二:
cd /usr/local/src/ git clone https://github.com/mongodb/mongo-php-driver cd mongo-php-driver git submodule update --init /usr/local/php-fpm/bin/phpize ./configure --with-php-config=/usr/local/php-fpm/bin/php-config make && make install vim /usr/local/php-fpm/etc/php.ini //增長 extension = mongodb.so /usr/local/php-fpm/bin/php -m /etc/init.d/php-fpm restart
7、php的mongo擴展
mongo.so
到pecl官網上下載mongo的擴展源碼包 cd /usr/local/src/ wget https://pecl.php.net/get/mongo-1.6.16.tgz tar zxvf mongo-1.6.16.tgz cd mongodb-1.6.16 /usr/local/php-fpm/bin/phpize ./configure --with-php-config=/usr/local/php-fpm/bin/php-config make && make install vim /usr/local/php-fpm/etc/php.ini //增長 extension = mongo.so /usr/local/php-fpm/bin/php -m /etc/init.d/php-fpm restart
測試mongo擴展,若是隻安裝了mongodb,沒有安裝mongo,使用以下代碼會報錯
參考文檔 https://docs.mongodb.com/ecosystem/drivers/php/
http://www.runoob.com/mongodb/mongodb-php.html
cd /data/wwwroot/default/ 根據nginx配置文件,到指定目錄建立
vim mongo.php
<?php $m = new MongoClient(); // 鏈接 $db = $m->test; // 獲取名稱爲 "test" 的數據庫 $collection = $db->createCollection("runoob"); echo "集合建立成功"; ?> curl localhost/mongo.php
進入mongodb數據庫中查看是否建立test庫和runoob集合
mongo --host 192.168.183.3 --port 27017 -u admin -p 'admin123' --authenticationDatabase "admin"
vim /usr/lib/systemd/system/mongod.service Environment="OPTIONS=-f /etc/mongod.conf" 把以前設置的--auth去掉,不在使用用戶名和密碼認證 curl localhost/mongo.php 此時查看是已經建立成功的
8、MongoDB架構-副本集(副本集是集羣)
早期版本使用master-slave,一主一從或一主多從和MySQL相似,但slave在此架構中爲只讀,當主庫宕機後,從庫不能自動切換爲主
目前已經淘汰master-slave模式,改成副本集,這種模式下有一個主(primary),和多個從(secondary),只讀。支持給它們設置權重,當主宕掉後,權重最高的從切換爲主
在此架構中還能夠創建一個仲裁(arbiter)的角色,它只負責裁決,而不存儲數據
再此架構中讀寫數據都是在主上,要想實現負載均衡的目的須要手動指定讀庫的目標server
副本集架構圖
9、MongoDB副本集搭建
三臺機器,都須要安裝mongodb: 192.168.183.3(primary) 192.168.183.33(secondary) 192.168.183.133(secondary)
把/etc/yum.repos.d/目錄下的mongodb.repo傳到另外兩臺機器或在另外兩臺機器上建立,複製mongodb.repo內容: scp mongodb.repo 192.168.183.133:/etc/yum.repos.d/ yum install -y mongodb-org
編輯三臺機器的配置文件,須要去掉配置文件中的--auth用戶認證(/usr/lib/systemd/system/mongod.service):
vim /etc/mongod.conf
bindIp: 127.0.0.1,192.168.183.3 注意bindIp後面要定義的本機ip,逗號分隔 更改或增長: replication: //把此行前面的#刪除 ##定義oplog大小,相似Mysql主從的binlog oplogSizeMB: 20//前面有兩個空格 ##定義副本集名稱 replSetName: tobe//前面有兩個空格 systemctl restart mongod
注意防火牆及iptables規則
鏈接主,在主上運行命令mongo
想要在哪臺機器上作PRIMARY,就在哪臺機器下作一下操做,一開始設置完成後三個都會是SECONDARY,可是系統會自動設置PRIMARY
use admin config={_id:"tobe",members:[{_id:0,host:"192.168.183.3:27017"},{_id:1,host:"192.168.183.33:27017"},{_id:2,host:"192.168.183.133:27017"}]} 配置副本集,id爲副本集名稱,members指定成員
rs.initiate(config) rs.status() //查看狀態 若是兩個從上的狀態爲"stateStr" : "STARTUP", 則須要進行以下操做 var config={_id:"tobe",members:[{_id:0,host:"192.168.183.3:27017"},{_id:1,host:"192.168.183.33:27017"},{_id:2,host:"192.168.183.133:27017"}]} rs.reconfig(config) 此時再次查看rs.status()會發現從的狀態變爲SECONDARY
10、MongoDB副本集測試
主上建庫,建集合
use mydb 建庫 db.acc.insert({AccountID:1,UserName:"123",password:"123456"}) 建集合 show dbs use mydb show tables
從上查看
show dbs
若出現下圖錯誤須要執行:
rs.slaveOk()
副本集更改權重模擬主宕機
執行rs.config()能夠查看三臺機器的權重(priority),默認三臺機器權重都爲1,若是任何一個權重設置爲比其餘的高,則該臺機器立刻切換爲primary角色,因此咱們預設三臺機器的權重分別爲:183.3->3,183.33->2,183.133->1
主上執行 iptables -I INPUT -p tcp --dport 27017 -j DROP
此時第一臺應該爲PRIMARY的機器已經報錯了,而且第二臺機器變爲了PRIMARY
主上: iptables -D INPUT -p tcp --dport 27017 -j DROP
清除規則後,第一臺機器能夠鏈接mongo,可是PRIMARY不會自動回到第一臺機器上,除非是有權重的狀況下
如下操做到新的PRIMARY機器下操做:
更改權重:
權重越高,優先級越高
cfg=rs.conf() 設置變量 cfg.members[0].priority = 3 cfg.members[1].priority = 2 cfg.members[2].priority = 1 rs.reconfig(cfg) 執行此操做設置生效 這樣的話,第二個節點將會成爲候選主節點。
此時第一臺機器切換爲PRIMARY
11、MongoDB分片介紹
分片小的單元就是副本集,分片是由多個副本集組成的 分片就是將數據庫進行拆分,將大型集合分隔到不一樣服務器上。好比,原本100G的數據,能夠分割成10份存儲到10臺服務器上,這樣每臺機器只有10G的數據。 經過一個mongos的進程(路由)實現分片後的數據存儲與訪問,也就是說mongos是整個分片架構的核心,對客戶端而言是不知道是否有分片的,客戶端只須要把讀寫操做轉達給mongos便可。 雖然分片會把數據分隔到不少臺服務器上,可是每個節點都是須要有一個備用角色的,這樣能保證數據的高可用。 當系統須要更多空間或者資源的時候,分片可讓咱們按需方便擴展,只須要把mongodb服務的機器加入到分片集羣中便可
MongoDB分片架構圖
config servers 配置服務器,也須要由副本集組成
MongoDB分片相關概念
mongos: 數據庫集羣請求的入口,,能夠設置多個,全部的請求都經過mongos進行協調,不須要在應用程序添加一個路由選擇器,mongos本身就是一個請求分發中心,它負責把對應的數據請求請求轉發到對應的shard服務器上。在生產環境一般有多mongos做爲請求的入口,防止其中一個掛掉全部的mongodb請求都沒有辦法操做。
config server: 配置服務器,存儲全部數據庫元信息(路由、分片)的配置。mongos自己沒有物理存儲分片服務器和數據路由信息,只是緩存在內存裏,配置服務器則實際存儲這些數據。mongos第一次啓動或者關掉重啓就會從 config server 加載配置信息,之後若是配置服務器信息變化會通知到全部的 mongos 更新本身的狀態,這樣 mongos 就能繼續準確路由。在生產環境一般有多個 config server 配置服務器,由於它存儲了分片路由的元數據,防止數據丟失!
shard: 存儲了一個集合部分數據的MongoDB實例,每一個分片是單獨的mongodb服務或者副本集,在生產環境中,全部的分片都應該是副本集。
12、mongodb分片搭建
三臺機器: 192.168.183.3 192.168.183.33 192.168.183.133
三臺機器 A B C A搭建:mongos、config server、副本集1主節點、副本集2仲裁、副本集3從節點 B搭建:mongos、config server、副本集1從節點、副本集2主節點、副本集3仲裁 C搭建:mongos、config server、副本集1仲裁、副本集2從節點、副本集3主節點 端口分配:mongos 20000、config 21000、副本集1 2700一、副本集2 2700二、副本集3 27003 三臺機器所有關閉firewalld服務和selinux,或者增長對應端口的規則
mkdir -p /data/mongodb/mongos/log mkdir -p /data/mongodb/config/{data,log} mkdir -p /data/mongodb/shard1/{data,log} mkdir -p /data/mongodb/shard2/{data,log} mkdir -p /data/mongodb/shard3/{data,log}
mongodb3.4版本之後須要對config server建立副本集
添加配置文件(三臺機器都操做)
mkdir /etc/mongod/ 建立配置文件目錄
vim /etc/mongod/config.conf //加入以下內容,config server配置文件
pidfilepath = /var/run/mongodb/configsrv.pid dbpath = /data/mongodb/config/data logpath = /data/mongodb/config/log/congigsrv.log logappend = true bind_ip = 192.168.183.3 #0.0.0.0所有監聽,三臺機器注意ip不一樣,寫每臺機器的ip port = 21000 fork = true #進程相關的配置 configsvr = true #declare this is a config db of a cluster; replSet=configs #副本集名稱 maxConns=20000 #設置最大鏈接數
啓動三臺機器的config server
mongod -f /etc/mongod/config.conf //啓動config server,三臺機器都要操做
登陸任意一臺機器的21000端口,初始化副本集
mongo --host 192.168.183.3 --port 21000 config = { _id: "configs", members: [ {_id : 0, host : "192.168.183.3:21000"},{_id : 1, host : "192.168.183.33:21000"},{_id : 2, host : "192.168.183.133:21000"}] } rs.initiate(config) rs.status() 能夠查看三臺機器的狀態
添加配置文件(分別在三臺機器都操做,每臺機器都須要:shard1.conf,shard2.conf,shard3.conf)
日誌路徑:/data/mongodb/shard1/log
vim /etc/mongod/shard1.conf //加入以下內容
pidfilepath = /var/run/mongodb/shard1.pid dbpath = /data/mongodb/shard1/data logpath = /data/mongodb/shard1/log/shard1.log logappend = true bind_ip = 0.0.0.0 #此處綁定的ip最好更改成本機的ip,目的是爲了更加安全 port = 27001 fork = true httpinterface=true #打開web監控 rest=true replSet=shard1 #副本集名稱 shardsvr = true #declare this is a shard db of a cluster; maxConns=20000 #設置最大鏈接數
vim /etc/mongod/shard2.conf //加入以下內容
pidfilepath = /var/run/mongodb/shard2.pid dbpath = /data/mongodb/shard2/data logpath = /data/mongodb/shard2/log/shard2.log logappend = true bind_ip = 0.0.0.0 port = 27002 fork = true httpinterface=true #打開web監控 rest=true replSet=shard2 #副本集名稱 shardsvr = true #declare this is a shard db of a cluster; maxConns=20000 #設置最大鏈接數
vim /etc/mongod/shard3.conf //加入以下內容
pidfilepath = /var/run/mongodb/shard3.pid dbpath = /data/mongodb/shard3/data logpath = /data/mongodb/shard3/log/shard3.log logappend = true bind_ip = 0.0.0.0 port = 27003 fork = true httpinterface=true #打開web監控 rest=true replSet=shard3 #副本集名稱 shardsvr = true #declare this is a shard db of a cluster; maxConns=20000 #設置最大鏈接數
啓動shard1:
mongod -f /etc/mongod/shard1.conf //三臺機器都要操做
搭建shard1的副本集
做爲仲裁的節點沒法當作登陸入口
登陸3或者33任何一臺機器的27001端口初始化副本集,133之因此不行,是由於shard1咱們把133這臺機器的27001端口做爲了仲裁節點
001機器上:
mongo --port 27001 use admin config = { _id: "shard1", members: [ {_id : 0, host : "192.168.183.3:27001"}, {_id: 1,host : "192.168.183.33:27001"},{_id : 2, host : "192.168.183.133:27001",arbiterOnly:true}] } rs.initiate(config)
啓動shard2
mongod -f /etc/mongod/shard2.conf //三臺機器都要操做
登陸33或者133任何一臺機器的27002端口初始化副本集,3之因此不行,是由於shard2咱們把3這臺機器的27002端口做爲了仲裁節點
mongo --port 27002 use admin config = { _id: "shard2", members: [ {_id : 0, host : "192.168.183.3:27002" ,arbiterOnly:true},{_id : 1, host : "192.168.183.33:27002"},{_id : 2, host : "192.168.183.133:27002"}] } rs.initiate(config)
002機器上:
啓動shard3
mongod -f /etc/mongod/shard3.conf //三臺機器都要操做
登陸3或者133任何一臺機器的27003端口初始化副本集,33之因此不行,是由於shard3咱們把33這臺機器的27003端口做爲了仲裁節點
003機器上:
mongo --port 27003 use admin config = { _id: "shard3", members: [ {_id : 0, host : "192.168.183.3:27003"}, {_id : 1, host : "192.168.183.33:27003", arbiterOnly:true}, {_id : 2, host : "192.168.183.133:27003"}] } rs.initiate(config)
rs.status() 查看狀態
添加配置文件(三臺機器都操做)
日誌路徑: /data/mongodb/mongos/log
vim /etc/mongod/mongos.conf //加入以下內容
pidfilepath = /var/run/mongodb/mongos.pid logpath = /data/mongodb/mongos/log/mongos.log logappend = true bind_ip = 0.0.0.0 port = 20000 fork = true configdb = configs/192.168.183.3:21000, 192.168.183.33:21000, 192.168.183.133:21000 #監聽的配置服務器,只能有1個或者3個,configs爲配置服務器的副本集名字 maxConns=20000 #設置最大鏈接數 啓動mongos服務,注意命令,前面都是mongod,這裏是mongos mongos -f /etc/mongod/mongos.conf
啓動時出現:failed: Name or service not known,不算錯誤。 日誌中關注error相關的信息便可
登陸任何一臺20000端口
mongo --port 20000
把全部分片和路由器串聯,注意ip之間不要有空格
sh.addShard("shard1/192.168.183.3:27001,192.168.183.33:27001,192.168.183.133:27001") sh.addShard("shard2/192.168.183.3:27002,192.168.183.33:27002,192.168.183.133:27002") sh.addShard("shard3/192.168.183.3:27003,192.168.183.33:27003,192.168.183.133:27003")
查看集羣狀態
sh.status() rs.status()查看副本集 sh.status()查看分片
登陸任何一臺20000端口
mongo --port 20000 use admin db.runCommand({ enablesharding : "testdb"}) 或者 sh.enableSharding("testdb") //指定要分片的數據庫,若是不存在,會自動建立 db.runCommand( { shardcollection : "testdb.table1",key : {id: 1} } ) 或者 sh.shardCollection("testdb.table1",{"id":1} ) //#指定數據庫裏須要分片的集合和片鍵 use testdb for (var i = 1; i <= 10000; i++) db.table1.save({id:i,"test1":"testval1"}) //插入測試數據
use testdb
sh.status() 或者 db.table1.stats() //查看table1狀態
十3、MongoDB備份恢復
(1)MongoDB備份
若是使用了分片,要到分片的端口中去備份
-d 指定庫,-c指定集合
備份指定庫,對應庫中有幾個集合,就會生成幾個集合的文件,它會在/tmp/mongobak 目錄下面生成一個testdb的目錄
mongodump --host 127.0.0.1 --port 20000 -d testdb -o /tmp/mongobak
備份全部庫
mongodump --host 127.0.0.1 --port 20000 -o /tmp/mongobak/alldatabase
指定備份集合,它依然會生成testdb目錄,再在這目錄下面生成兩個文件
mongodump --host 127.0.0.1 --port 20000 -d testdb -c table1 -o /tmp/mongobak3/
導出集合爲json文件
mongoexport --host 127.0.0.1 --port 20000 -d testdb -c table1 -o /tmp/table1.json
(2)MongoDB恢復
先把testdb庫刪除
恢復全部庫
mongorestore -h 127.0.0.1 --port 20000 --drop /tmp/mongobak/alldatabase/ //其中dir是備份全部庫的目錄名字,其中--drop可選,意思是當恢復以前先把以前的數據刪除,不建議使用
恢復指定庫
mongorestore -h 127.0.0.1 --port 20000 -d testdb --drop /tmp/mongobak/alldatabase/testdb/ //-d跟要恢復的庫名字,dir就是該庫備份時所在的目錄
恢復集合
mongorestore -d mydb -c table1 /tmp/mongobak/alldatabase/testdb/table1.bson // -c後面跟要恢復的集合名字,後面的路徑是備份testdb庫時生成文件所在路徑,這裏是一個bson文件的路徑
導入集合
mongoimport -d testdb -c table1 --file /tmp/mongobak/alldatabase/testdb/table1.json