項目實戰9—企業級分散式存儲應用與實戰MogileFS、FastDFS

来源:http://www.cnblogs.com/along21/archive/2017/11/28/7911676.html
-Advertisement-
Play Games

企業級分散式存儲應用與實戰-mogilefs 環境:公司已經有了大量沉澱用戶,為了讓這些沉澱用戶長期使用公司平臺,公司決定增加用戶粘性,逐步發展基於社交屬性的多樣化業務模式,決定開展用戶討論區、賣家秀、買家秀、用戶試穿短視頻等業務,因此,公司新的業務的業務特征將需要海量數據存儲,你的領導要求基於開源 ...


企業級分散式存儲應用與實戰-mogilefs

  環境:公司已經有了大量沉澱用戶,為了讓這些沉澱用戶長期使用公司平臺,公司決定增加用戶粘性,逐步發展基於社交屬性的多樣化業務模式,決定開展用戶討論區、賣家秀、買家秀、用戶試穿短視頻等業務,因此,公司新的業務的業務特征將需要海量數據存儲,你的領導要求基於開源技術,實現對公司海量存儲業務的技術研究和實現,你可以完成任務嗎?

 總項目流程圖,詳見 http://www.cnblogs.com/along21/p/7435612.html

 

實驗前準備:配置好yum源、防火牆關閉、各節點時鐘服務同步

 

實戰一:企業級分散式存儲應用與實戰 mogilefs 實現

架構圖

原理

(1)mogileFS主要由三部分構成:tracker節點,database節點,storage節點

Tracker(MogileFSd 進程):這個是 MogileFS 的核心部分,他是一個調度器,MogileFSd 進程就是trackers進程程式,trackers 做了很多工作:Replication,Deletion,Query,Reaper,Monitor 等等,這個是基於事件的( event-based ) 父進程/消息匯流排來管理所有來之於客戶端應用的交互(requesting operations to be performed),,包括將請求負載平衡到多個"query workers"中,然後讓 MogileFSd 的子進程去處理;

MySQL:用來存放 MogileFS 的元數據 (命名空間, 和文件在哪裡),是Trackers 來操作和管理它,可以用mogdbsetup程式來初始化資料庫,因為資料庫保存了MogileFS的所有元數據,建議做成HA架構;

Storage Nodes:這個是 MogileFS 存儲文件存放在這些機器上,也是 mogstored 節點,也叫Storage Server,一臺存儲主要都要啟動一個 mogstored 服務.擴容就是增加這些機器,實際文件存放的地方

 

(2)MogileFS管理的幾個概念:

Domain域:一個MogileFS可以有多個Domain,用來存放不同文件(大小,類型),同一個Domain內key必須唯一不同Domain內,key可以相同;

② 每一個存儲節點稱為一個主機host,一個主機上可以有多個存儲設備dev(單獨的硬碟),每個設備都有ID號,Domain+Fid用來定位文件。

Class:文件屬性管理,定位文件存儲在不同設備上的份數

 

(3)工作流程

每次文件的上傳和讀取,都經過前端TrackerServer 伺服器,trackerServer 伺服器受到client 端的請求查詢資料庫返回一個上傳或者是讀取的可用的後端StorageServer 的地址,然後由client 端直接操作後端StorageServer 伺服器。upload 操作返回就是成功或者失敗的結果,read操作就是返回對應的查詢數據。

 

(4)mogilefs 服務很特殊:服務配置完畢,開啟服務後;還需命令行命令,服務才能真正生效!

 

1、環境準備

機器名稱

IP配置

服務角色

備註

tracker-srv

192.168.30.107

調度器

tracker、mysql

storage node1

192.168.30.7

文件存放

mogstored 服務

storage node2

192.168.30.2

文件存放

mogstored 服務

 

2、下載安裝,每個機器都一樣

兩個安裝方式:yum安裝 和 perl程式安裝

方法一:yum安裝(推薦)

(1)所依賴的包,centos 自帶的

yum install perl-Net-Netmask perl-IO-String perl-Sys-Syslog perl-IO-AIO

 

(2)服務的rpm包,我已經放在我的網盤裡了,需要的私聊 http://pan.baidu.com/s/1c2bGc84

MogileFS-Server-2.46-2.el6.noarch.rpm        #核心服務

perl-Danga-Socket-1.61-1.el6.rf.noarch.rpm  #socket

MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm    # tracker節點

perl-MogileFS-Client-1.14-1.el6.noarch.rpm  #客戶端

MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm   #Storage存儲節點

MogileFS-Utils-2.19-1.el6.noarch.rpm    #主要是MogileFS的一些管理工具,例如mogadm等。

 

(3)開始安裝

cd mogileFS/

yum localinstall ./* -y

 

方法二:perl程式源碼包安裝:通過perl的包管理命令cpanm進行安裝

(1)依賴的包

yum -y install make gcc unzip perl-DBD-MySQL perl perl-CPAN perl-YAML perl-Time-HiRes

(2)cpanm安裝

wget http://xrl.us/cpanm -O /usr/bin/cpanm;

sudo chmod +x /usr/bin/cpanm

#cpanm DBD::mysql

#cpanm MogileFS::Server

#cpanm MogileFS::Utils

#cpanm MogileFS::Client

#cpanm IO::AIO

 

3、資料庫初始化

(1)創建mogilefs 所需要的用戶並授權

systemctl start mariadb 開啟mysql服務

MariaDB [mogilefs]> GRANT ALL PRIVILEGES ON mogilefs.* TO 'mogile' @'127.0.0.1' IDENTIFIED BY 'mogile' WITH GRANT OPTION;
MariaDB [mogilefs]> flush privileges;    刷新下許可權

(2)設定資料庫:資料庫初始化

mogdbsetup --dbpass=mogile

 

4、在tracker-srv 伺服器上,啟動mogilefsd服務

(1)修改管理tracker 的配置文件

vim /etc/mogilefs/mogilefsd.conf

① 配置資料庫連接相關信息
db_dsn = DBI:mysql:mogilefs:host=127.0.0.1
db_user = mogile
db_pass = mogile
② 下邊的只需修改監聽地址和埠
listen = 192.168.30.107:7001 #mogilefs監聽地址,監聽在127.0.0.1表示只允許從本機登錄進行管理
query_jobs = 10   #啟動多少個查詢工作線程
delete_jobs = 1    #啟動多少個刪除工作線程
replicate_jobs = 5   #啟動多少個複製工作線程
reaper_jobs = 1      #啟動多少個用於回收資源的線程
maxconns = 10000   #存儲系統的最大連接數.
httplisten = 0.0.0.0:7500   #可通過http訪問的服務埠
mgmtlisten = 0.0.0.0:7501   #mogilefs的管理埠
docroot = /var/mogdata   #該項決定了數據的在storage上存儲的實際位置,建議使用的是一個單獨掛載使用的磁碟

(2)創建進程需要的目錄,並授權

mkdir /var/run/mogilefsd/

chown -R mogilefs.mogilefs /var/run/mogilefsd

 

(3)開啟服務

/etc/init.d/mogilefsd start

有時候會顯示啟動失敗;但實際則是啟動成功了。可以

ss -nutlp|grep mogilefs 查詢是否有mogilefsd 的監聽ip和埠

 

5、在兩台storage node 上,啟動mogstored服務

(1)修改storage node 的配置文件

vim /etc/mogilefs/mogstored.conf

maxconns = 10000   #存儲系統的最大連接數.
httplisten = 0.0.0.0:7500    #可通過http訪問的服務埠
mgmtlisten = 0.0.0.0:7501   #mogilefs的管理埠
docroot = /data/mogdata    #該項決定了數據的在storage上存儲的實際位置,建議使用的是一個單獨掛載使用的磁碟

 

(2)創建storage 存儲的目錄

mkdir -p /data/mogdata

(3)授權

cd /data/

chown mogilefs.mogilefs mogdata/ -R

(4)開啟服務,有時候開啟服務顯示失敗,其實已經成功

/etc/init.d/mogstored start

  

6、修改客戶端工具配置

vim /etc/mogilefs/mogilefs.conf 客戶端工具配置文件

trackers=192.168.30.107:7001 #自己的tracker 的服務IP和埠

 

7、storage node 節點加入到MogileFS 的系統中

在tracker 的伺服器上:

(1)加入"存儲節點storage node1/2"到 trackers 中

mogadm --tracker=192.168.30.107:7001 host add node1 --ip=192.168.30.7 --port=7500 --status=alive
mogadm --tracker=192.168.30.107:7001 host add node2 --ip=192.168.30.2 --port=7500 --status=alive

(2)查詢信息,檢查主機是否加入到 MogileFS 的系統中

mogadm check

mogadm host list

 

(3)當然,操作錯誤也可以修改

mogadm host modify node1 --ip=192.168.30.7 --port=7500 --status=alive

 

8、創建設備

在兩個storage node 伺服器上:

(1)創建"設備"實驗的目錄並授權,格式: dev + ID

註意:所有系統中 ID 不能重覆,也必須和配置文件中的路徑一樣

cd mogdata/

mkdir dev1

chown mogilefs.mogilefs dev1/ -R 加許可權

設置成功,會在dev1下生成一個文件,是tracker 過來測試留下來的

 

(2)在另一臺伺服器上也一樣

cd mogdata/

mkdir dev2

chown mogilefs.mogilefs dev2/ -R

 

9、兩個設備加入 MogileFS 的存儲系統中

(1)在tracker 上

mogadm --tracker=192.168.30.107:7001 device add node1 1

mogadm --tracker=192.168.30.107:7001 device add node1 1
mogadm --tracker=192.168.30.107:7001 device add node2 2

(2)查看設備信息

mogadm check 檢測出來兩個設備的信息了

mogadm device list 能查詢設備的詳細信息

 

(3)在資料庫中也能查出設備

MariaDB [mogilefs]> select * from device;

MariaDB [mogilefs]> select * from host;

 

10、劃分域、class

mogadm domain add img 創建一個img域

mogadm class add img along --mindevcount=3 在img域中創建一個along的class,可以存放3份

 

11、上傳文件且測試

(1)上傳一張圖片

mogupload --domain=img --key=test --file=along.jpg 向img域中上傳一張along.jpg的圖片,key為test

mogfileinfo --domain=img --key=test 查詢文件

 

(2)網頁訪問http://192.168.30.2:7500/dev2/0/000/000/0000000002.fid

 

(3)當然,也可以刪除圖片

mogdelete --domain=img --key=test

 

(4)在資料庫也能查看到

MariaDB [mogilefs]> select * from file;

 

(5)在後端兩個storage node 上也能查到圖片,圖片就是存放到storage node伺服器上的

註意:本來,後端兩個storage node 上應該都有存放的圖片,能互相複製,是副本關係,但這一版本有BUG

我的只有在storage node2 上才有這張圖片

 

12、修複bug,實現後端storage node 同步存儲

分析:因為這個版本有bug,所以需降版本

(1)下載包

wget http://search.cpan.org/CPAN/authors/id/B/BR/BRADFITZ/Sys-Syscall-0.23.tar.gz

也可以http://search.cpan.org/CPAN/authors/id/B/BR/BRADFITZ/Sys-Syscall-0.23.tar.gz 去網站直

接下載

(2)上傳,解壓縮

rz,tar xvf Sys-Syscall-0.23.tar.gz -C /tmp

(3)編譯安裝

① 因為是perl 語言編寫的,所以需要安裝perl 編譯安裝的環境

yum -y install make gcc unzip perl-DBD-MySQL perl perl-CPAN perl-YAML perl-Time-HiRes

② 編譯安裝

cd /tmp/Sys-Syscall-0.23/

perl Makefile.PL 準備環境

make & make install

 

(4)重啟服務

① 在tracker 伺服器是,有時候開啟服務顯示失敗,其實已經成功

/etc/init.d/mogilefsd stop

/etc/init.d/mogilefsd start

② 在storage node 伺服器上,有時候開啟服務顯示失敗,其實已經成功

/etc/init.d/mogstored stop

/etc/init.d/mogstored start

 

(5)測試

① 再上傳一張圖片

mogupload --domain=img --key=test1 --file=along.jpg

② 在兩個storage node 伺服器上,存儲已經實現同步

 

實戰二:mogilefs 和mysql主從 實現分散式存儲

原理:在database 上實現mysql的主從;且為了提升性能,在每個節點上都配置tracker

1、環境準備

機器名稱

IP配置

服務角色

備註

mogilefs-

mysql-master

192.168.30.107

主資料庫

tracker、mysql

mogilefs-

mysql-slave

192.168.30.7

從資料庫

tracker、mysql

mogilefs-

store1

192.168.30.2

文件存放

tracker、storage

mogilefs-

store2

192.168.30.3

文件存放

tracker、storage

 

2、在所有機器上下載安裝mogilefs

(1)所依賴的包,centos 自帶的

yum install perl-Net-Netmask perl-IO-String perl-Sys-Syslog perl-IO-AIO

 

(2)服務的rpm包,我已經放在我的網盤裡了,需要的私聊 http://pan.baidu.com/s/1c2bGc84

MogileFS-Server-2.46-2.el6.noarch.rpm #核心服務

perl-Danga-Socket-1.61-1.el6.rf.noarch.rpm #socket

MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm # tracker節點

perl-MogileFS-Client-1.14-1.el6.noarch.rpm #客戶端

MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm #Storage存儲節點

MogileFS-Utils-2.19-1.el6.noarch.rpm #主要是MogileFS的一些管理工具,例如mogadm等。

 

(3)開始安裝

cd mogileFS/

yum localinstall ./* -y

 

3、在兩台mysql上實現主從

(1)在主mysql 上

① vim /etc/my.cnf 修改mysql主配置文件,對master進行配置,包括打開二進位日誌,指定唯一的servr ID

server-id=1         #配置server-id,讓主伺服器有唯一ID號
log-bin=mysql-bin   #打開Mysql日誌,日誌格式為二進位
skip-name-resolve   #關閉名稱解析,(非必須)

systemctl start mariadb 開啟服務

 

創建並授權slave mysql 用的複製帳號

MariaDB [(none)]> grant replication slave,replication client on *.* to slave@'192.168.30.7' identified by 'along';

 

③ 查看主伺服器狀態

在Master的資料庫執行show master status,查看主伺服器二進位日誌狀態,位置號

 

(2)在從mysql 上

① 修改主配置文件

vim /etc/my.cnf 打開中繼日誌,指定唯一的servr ID,設置只讀許可權

server-id=2       #配置server-id,讓從伺服器有唯一ID號
relay_log = mysql-relay-bin    #打開Mysql日誌,日誌格式為二進位
read_only = 1    #設置只讀許可權
log_bin = mysql-bin         #開啟從伺服器二進位日誌,(非必須)
log_slave_updates = 1  #使得更新的數據寫進二進位日誌中 

systemctl start mariadb 開啟服務

 

啟動從伺服器複製線程,讓slave連接master,並開始重做master二進位日誌中的事件。

MariaDB [(none)]> change master to master_host='192.168.30.107',
    -> master_user='slave',
    -> master_password='along',
    -> master_log_file='mysql-bin.000001',
    -> master_log_pos=245;
MariaDB [(none)]>  start slave;   # 啟動複製線程,就是打開I/O線程和SQL線程;實現拉主的bin-log到從的relay-log上;再從relay-log寫到資料庫記憶體里

③ 查看從伺服器狀態

可使用SHOW SLAVE STATUS\G查看從伺服器狀態,如下所示,也可用show processlist \G查看當前複製狀態:

Slave_IO_Running: Yes #IO線程正常運行

Slave_SQL_Running: Yes #SQL線程正常運行

 

3、初始化資料庫

(1)在主mysql上授權,因為主從同步,所以只需操作主

MariaDB [(none)]> GRANT ALL PRIVILEGES ON mogilefs.* TO 'mogile'@'192.168.30.%' IDENTIFIED BY 'mogile' WITH GRANT OPTION;
MariaDB [mogilefs]> flush privileges;    刷新下許可權

(2)資料庫初始化,在兩個機器上都初始化

mogdbsetup --dbpass=mogile

 

4、在所有機器上,開啟tracker服務

(1)修改管理tracker 的配置文件

vim /etc/mogilefs/mogilefsd.conf

① 配置資料庫連接相關信息
db_dsn = DBI:mysql:mogilefs:host=192.168.30.107
db_user = mogile
db_pass = mogile
② 下邊的只需修改監聽地址和埠
listen = 192.168.30.107:7001 #mogilefs監聽地址,監聽在127.0.0.1表示只允許從本機登錄進行管理;註意,4台機器寫自己的IP地址
listen = 192.168.30.7:7001
listen = 192.168.30.2:7001
listen = 192.168.30.3:7001
註意:不是寫4個,是在4個機器上分別寫

(2)創建進程需要的目錄,並授權

mkdir /var/run/mogilefsd/

chown -R mogilefs.mogilefs /var/run/mogilefsd

 

(3)開啟服務,4台都開啟

/etc/init.d/mogilefsd start

有時候會顯示啟動失敗;但實際則是啟動成功了。可以

ss -nutlp|grep mogilefs 查詢是否有mogilefsd 的監聽ip和埠

 

5、在兩個mogilefs-store 上開啟storage 服務

(1)修改storage node 的配置文件

vim /etc/mogilefs/mogstored.conf

maxconns = 10000   #存儲系統的最大連接數.
httplisten = 0.0.0.0:7500    #可通過http訪問的服務埠
mgmtlisten = 0.0.0.0:7501   #mogilefs的管理埠
docroot = /data/mogdata    #該項決定了數據的在storage上存儲的實際位置,建議使用的是一個單獨掛載使用的磁碟

 

(2)創建storage 存儲的目錄

mkdir -p /data/mogdata

(3)授權

cd /data/

chown mogilefs.mogilefs mogdata/ -R

(4)開啟服務,有時候開啟服務顯示失敗,其實已經成功

/etc/init.d/mogstored start

 

6、修改客戶端工具配置

vim /etc/mogilefs/mogilefs.conf 客戶端工具配置文件,4個機器寫自己的tracker

trackers=192.168.30.107:7001   #自己的tracker 的服務IP和埠
trackers=192.168.30.7:7001
trackers=192.168.30.2:7001
trackers=192.168.30.3:7001
註意:是各自寫各自的,不是都寫在一個機器里

 

 

7、storage node 節點加入到MogileFS 的系統中

在tracker 的伺服器上:只需在一個tracker 伺服器上做就行了

(1)加入"存儲節點storage node1/2"到 trackers 中

mogadm  host add node1 --ip=192.168.30.3 --port=7500 --status=alive
mogadm  host add node2 --ip=192.168.30.2 --port=7500 --status=alive

(2)查詢信息,檢查主機是否加入到 MogileFS 的系統中

mogadm check

mogadm host list

 

(3)當然,操作錯誤也可以修改

mogadm host modify node1 --ip=192.168.30.3 --port=7500 --status=alive

 

8、創建設備

mogilefs-store1 伺服器上:

(1)創建"設備"實驗的目錄並授權,格式: dev + ID

註意:所有系統中 ID 不能重覆,也必須和配置文件中的路徑一樣

cd /data/mogdata/

mkdir dev1

chown mogilefs.mogilefs dev1/ -R 加許可權

設置成功,會在dev1下生成一個文件,是tracker 過來測試留下來的

 

(2)在另一臺伺服器上也一樣

cd mogdata/

mkdir dev2

chown mogilefs.mogilefs dev2/ -R

 

9、兩個設備加入 MogileFS 的存儲系統中

(1)在tracker 上

mogadm  device add node1 1
mogadm  device add node2 2

(2)查看設備信息

mogadm check 檢測出來兩個設備的信息了

mogadm device list 能查詢設備的詳細信息

 

(3)在資料庫中也能查出設備

MariaDB [mogilefs]> select * from device;

MariaDB [mogilefs]> select * from host;

 

10劃分域/class、11上傳文件且測試、12修複bug  步驟都同上

實戰三:FastDFS 實現分散式存儲

架構圖:

原理

(1)FastDFS核心組件

Tracker:調度器,負責維持集群的信息,例如各group及其內部的storage node,這些信息也是storage node報告所生成;每個storage node會周期性向tracker發心跳信息

storage server:以group為單位進行組織,任何一個storage server都應該屬於某個group,一個group應該包含多個storage server;在同一個group內部,各storage server的數據互相冗餘;

 

(2)FastDFS架構的特點

只有兩個角色tracker server和storage server不需要存儲文件索引信息

• 所有伺服器都是對等的不存在Master-Slave關係

• 存儲伺服器採用分組方式同組記憶體儲伺服器上的文件完全相同(RAID 1)

不同組的storage server之間不會相互通信

• 由storage server主動向tracker server報告狀態信息,tracker server之間通常不會相互通信

 

(3)FastDFS同步機制

① 採用binlog文件記錄更新操作,根據binlog進行文件同步同一組內的storage server之間是對等的,文件上傳、刪除等操作可以在任意一臺storage server上進行;

② 文件同步只在同組內的storage server之間進行,採用push方式,即源伺服器同步給目標伺服器;

③ 源頭數據才需要同步,備份數據不需要再次同步,否則就構成環路了;

上述第二條規則有個例外,就是新增加一臺storage server時,由已有的一臺storage server將已有的所有數據(包括源頭數據和備份數據)同步給該新增伺服器。

 

(4)FastDFS運行機制

---> 上傳文件

① client詢問tracker上傳到的storage;

② tracker返回一臺可用的storage;

③ client直接和storage通信完成文件上傳,storage返回文件ID

<--- 下載文件

① client詢問tracker下載文件的storage,參數為文件ID(組名和文件名)

② tracker返回一臺可用的storage;

③ client直接和storage通信完成文件下載

 

(5)FastDFS 與 mogileFS 的區別

 

1、環境準備

機器名稱

IP配置

服務角色

備註

tracker-srv

192.168.30.107

調度器

tracker、不需mysql

storage srv1

192.168.30.7

文件存放

 

storage srv2

192.168.30.2

文件存放

 

 

2、下載安裝

mkdir /fastdfs 創建一個存放fastdfs所需包的目錄

所需要的包,我已經存放在我的網盤了,有需要的私聊

https://pan.baidu.com/share/init?surl=c2bGc84

cd /fastdfs

yum -y localinstall ./*

 

3、在tracke 的伺服器上,開啟tracke 服務

(1)修改配置文件

cd /etc/fdfs tracker的配置文件的模板已經準備好了,只需複製修改就好

cp tracker.conf.sample tracker.conf

 

vim /etc/fdfs/tracker.conf    必須修改的一項

base_path=/data/fastdfs/tracker     #base源路徑

① 還可以修改一些自己需要的,如上傳、下載方式

② 訪問許可權控制

 

(2)創建目錄

mkdir /data/fastdfs/tracker -p

 

(3)啟動tracker服務

/etc/init.d/fdfs_trackerd start

 

4、在後端兩台storage server上,開啟storage 快照

在storage server上 storage的配置文件的模板已經準備好了,只需複製修改就好

cd /etc/fdfs

cp storage.conf.sample storage.conf

(1)修改配置文件

vim storage.conf 必須修改3項

base_path=/data/fastdfs/storage   #base源路徑
store_path0=/data/fastdfs/storage    #實際存儲目錄
tracker_server=192.168.30.107:22122    #指定tracker

(2)創建目錄

mkdir /d

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 各位小伙伴,上次講了《深入淺出Redis》和《Redis安裝和實際應用》本篇文章將為大家解密redis的持久化和主從複製機制。 Redis持久化 Redis 提供了多種不同級別的持久化方式: RDB 持久化可以在指定的時間間隔內生成數據集的時間點快照(point-in-time snapshot)。 ...
  • 參考鏈接:http://www.yiibai.com/mysql/ 一、 SQLECT 語法 SELECT column_1, column_2, ... FROM table_1 [INNER | LEFT |RIGHT] JOIN table_2 ON conditions WHERE cond ...
  • 解決power designer 不能自動生成註釋的解決辦法只需要3步: 一、快捷鍵 Alt+Shift+X 打開腳本編輯器; 二、將下麵天藍色的字體腳本添加到腳本編輯器裡面; Option ExplicitValidationMode = TrueInteractiveMode = im_Batc ...
  • [20171128]rman Input or output Memory Buffers.txt--//做一個簡單測試rman 的Input or output Memory Buffers.1.環境:SCOTT@book> @ &r/ver1PORT_STRING VERSION BANNER ...
  • 一、建表 1、最簡單的建表CREATE TABLE user(id int,name char(20),age int); 2、帶主鍵帶註釋和預設值創建表CREATE TABLE user(id INT PRIMARY KEY AUTO_INCREMENT COMMENT '設置主鍵自增',name ...
  • (開頭閑淡)項目需要必須安裝SQL的,查了很久,斷斷續續用了各種方法,今天終於用了正確的姿(xia)勢(mo)弄成了。 最開始用的方法是調用Win的API模擬滑鼠操作安裝的,嗯,雖然勉強可以,就是有些狗屎。 大概可以放到GitHub 上丟人現眼了 今天搜資料庫創建的問題看到"無人值守安裝sql",才 ...
  • oracle基本簡單的用法,之前的筆記稍作整理一下,希望對各位有用,如有問題可在下方留言,所有SQL都是經過oracle環境測試的,可複製可粘貼。 今天先寫這些,未完,待續。。。。 ...
  • 下載官方的軟體包,參考地址:http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/jdk-8u151-linux-x64.tar.gz?AuthParam=1511877655_2 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...