MySQL Partitioning 分區

限制

 

MySQL 分區可以設定更改原先資料儲存結果。

以 MYISAM 引擎為例,原本一個 A 資料表在硬碟會存在

  • A.frm
  • A.MYD
  • A.MYI

三個檔案,無論資料筆數多寡都放在同一檔案內,這時資料儲存限制 == 作業系統單一檔案大小限制。在目前主流檔案系統之下,單一檔案大小限制在 4G ~ 16TByte 之間。

資料表太大對資料庫不是好事,有可能只為了讀取 10Byte 的資料,卻將整個資料表都讀取一遍,如果可能還是需要控制資料表的實體儲存容量,達到增進效能以及方便管理的目的。

參考

 

MySQL_Partitioning01

以時間作為分區依據

以一個有 AUTO_INCREMENT 及 CURRENT_TIMESTAMP 的資料表為例,

關鍵是「必須把區分時間的欄位包含到 Primary Key 內

 

一個將無分區資料表修改為具分區功能範例

  1. 建立一個具有分區功能資料表,必須和原資料表資料結構相同,準備做替換用
  2. 將原資料表資料複製到此分區資料表,使用的是 INSERT SELECT 語法
  3. 刪除原資料表
  4. 將分區資料表名稱更換為原資料表名稱

顯示資料表分區資訊

使用的是顯示建立資料表資訊技巧

一個分區資料表建立後修改範例

 

 

分區區分到年、月

順便說一個情況,第一個設定是 199501 ,代表 1995年1月以前的資料存在此,而199502 則只存放 1995年 2 月的資料,因為沒有 MAXVALUE 所以超過的日期會新增失敗

InnoDB 如何分區區分檔案

重新啟動資料庫

使用 HASH

使用 Create_Time 轉天數後 hash

 

從插入多筆 2018/06/07 資料來觀察 HASH 儲存資料邏輯

分區刪除合併檔案變化

分區會將檔案根據條件分開,刪除分區檔案就會合併?

理論上是如此,實際測試亦是如此

查詢時是否有效套用到分區?

使用 EXPLAIN PARTITIONS 可以查詢取用分區檔案的狀態

id select_type table partitions type possible_keys key key_len ref rows Extra
1 SIMPLE Data2 p6 ALL NULL NULL NULL NULL 2738 Using where

如果查訊跨到多日就會查詢到多個或是全部的分區檔案,如此就失去分區作用

1,269 total views, no views today

PHP curl 使用

基本使用

使用 CURLOPT_URL 設定連結網址,然後執行即可。順利的話就可以取得回傳網頁原始碼

不直接顯示取得內容

將 CURLOPT_RETURNTRANSFER 設定為 true 即可

加上 POST 資料

增加 CURLOPT_POSTFIELDS 參數,傳遞 array() 陣列

Google+ 在 OAuth 內的資訊必須使用 POST 傳遞,使用方法大致如下

取得處理狀態

curl_getinfo() 可以得知執行後結果

設定或增加其他功能、參數

設定 REFERER 參照來源網址

如何得知送出的 Head ?

步驟

  1. 設定 CURLINFO_HEADER_OUT 為 true
  2. 使用 curl_getinfo() 取得輸出結果, 送出 Head 也在結果內

增加自定義 Head

增加自定義 – 傳遞連線 IP

HEAD 名稱前面強制加上 HTTP_ 開頭,因此取得 IP 時必須相互搭配

目的端 PHP 取得 IP 程式方法

首先請先看以下參考連結

這裡討論到一段網路普遍「謠傳」的取得 IP 代碼

大部分抄這段程式碼的人都不知道為什麼要先取 HTTP_CLIENT_IP 和 HTTP_X_FORWARDED_FOR 這兩個值,等學會 curl 之後就會知道大大說這是唬爛是正確的。

想要知道接收端資訊必須另外儲存,文字檔、資料庫等都可以,為了方便這裡使用文字檔

隱藏 _SERVER[‘REMOTE_ADDR’]

設定使用 Proxy Server 代理連線,對方取得的 REMOTE_ADDR 就是 Proxy Server 的 IP

送出 HTTP Auth

如果有一個網頁使用 HTTP Auth 使用者認證,該如何使用 PHP curl 登錄取得資料?

以下是 zopim 的取得聊天紀錄範例,本來是使用 Linux curl 指令操作的,例如:

PHP 可以這樣實現

Timeout 以及取得 Timeout 錯誤

上傳檔案 PHP 5.4 以下

將檔案存放路徑的檔案名稱前加上 @ 即可

上傳檔案 PHP 5.5 以上

如要沿用 5.4 舊方法則設定 curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false); 即可

HTTP 417 – Expectation Failed

5,037 total views, 6 views today

RICOH THETA 網頁全景處理

參考

360 Degree Interactive Panoramas And Virtual Tours In Html 5 – Multiple Browsers / 360 Easy – Complete Tutorial On 360 Degree Photography

 

720全景图

 

240 total views, no views today

PHP command line 傳遞參數

  • $argc 回傳傳遞參數數量
  • $argv 以 array 型態回傳傳遞參數的值

cli.php

執行 php cli.php

看起來 cli.php 這個檔案也被 php 當成了一個傳遞參數

執行 php cli.php v1 v2 v3

230 total views, no views today

CentOS 使用 yum 安裝 FFmpeg

CentOS 7 安裝 FFmpeg 4.0.1

2018-07-11 更新 – 4.x

可能發生的錯誤

  • 套件衝突 file /usr/lib64/libva.so.1 from install of libva-1.8.3-1.el7.x86_64 conflicts with file from package libva1-1.3.1-11.el7.x86_64

2018-06-12 已經更新目前有效方式 – 2.6.8

安裝

CentOS 6 安裝 FFmpeg 2.6.8

1,767 total views, no views today