Posts
Redis - A simple syntax to describe how data stored
在使用 redis 時,資料怎樣在 redis 內存放常會需要設計,或是需要拿出來跟團隊溝通討論。用畫圖表述或是列表有點不方便,redis 資料結構豐富也不是很好表示。
這邊筆者嘗試定義簡易的表示方式。
String 型態表示方式…
$string-key => $string-value Hash 型態表示方式…(設計概念為 Dictionary)
$hash-key => { {$field-key, $field-value}, ... } List 型態表示方式…(設計概念為 Array)
$list-key => [ $list-value, ... ] Set 型態表示方式…(設計概念為 Set)
$set-key => { $set-value, ... } SortedSet 表示方式…(設計概念為 Tuple set)
$sorted-set-key => { ($score, $set-value), ... } 像是 Redis reliable queue 那篇的設計…
用這樣的表示方式設計就會變成這樣:
pending => [$data-id, ...] working:$worker-id => [$data-id, ...] value => { {$data-id, $data}, .
read morePosts
mysqlslap - Load emulation client
mysqlslap 是 MariaDB 自帶的壓力測試工具。
使用方式可調閱命令。
mysqlslap --help 簡單的說如果資料庫不在本機,調用命令時可帶入 -h, –host=name 指定資料庫位置。
如果資料庫使用的不是預設埠號,可帶入 -P, –port=# 指定埠號。
參數 -i, –iterations=# 可指定運行的次數。
參數 -c, –concurrency=name 指定連結資料庫的 Client 數,也就是所謂的並行數。
參數 -a, –auto-generate-sql 指定自動產生測試的指令。
以一個簡單的測試來說,我們會指定運行的次數、並行 Client 數、與自動產生測試的指令。
mysqlslap -c $concurrent -i $number -a 如果要運行不同的測試次數,可用逗號隔空。
參數 -T, –debug-info 可指定印出一些更為細部的資訊。
mysqlslap -c $concurrent -i $number -a -T 參數 -e, –engine=name 可指定測試的資料庫引擎。
可用來指定測試 myisam 或是 innodb。
mysqlslap -c $concurrent -i $number -a -e $engine 參數 -F, –delimiter=name 可指定 SQL 語法的 Delimiter。
read morePosts
MariaDB - Enable performance schema
透過 MySQL CLI 查閱 Performance schema 的啟用狀態。
show variables like 'performance_schema'; 如果 Performance schema 未啟用,可開啟 MariaDB 的設定檔,加入 performance_schema=on 設定後存檔,然後將 MariaDB 服務重啟。
[mysqld] performance_schema=on Performance schema 就會被啟用。這邊可再次查詢 Performance schema 的啟用狀態做個確認。
read morePosts
Perl - Install on Termux
要在 Termux 上撰寫或運行 Perl,可透過套件管理工具安裝 Perl 套件。
apt install perl 安裝完調用 perl 命令,並帶入 –version 參數,確認 Perl 的安裝,若安裝無誤可看到安裝的 Perl 版本。
perl --version
read morePosts
Blazor - Dependency injection
Blazor component 若需要使用 Service,可透過 DI 注入。
像是 Blazor 範本內就有一個 Service。
using System; using System.Linq; using System.Threading.Tasks; namespace WebApplication1.Data { public class WeatherForecastService { private static string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; public Task<WeatherForecast[]> GetForecastAsync(DateTime startDate) { var rng = new Random(); return Task.FromResult(Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = startDate.AddDays(index), TemperatureC = rng.Next(-20, 55), Summary = Summaries[rng.Next(Summaries.Length)] }).ToArray()); } } } 這個 Service 會在 Startup.
read morePosts
Blazor - Route to components
Blazor component 在未加掛 @page directive 時只能像 HTML element 一樣嵌入頁面使用。
如果要能直接當成頁面透過 Routing 訪問,可在 Blazor component 最前面加掛 @page directive,指定 Blazor component 的 routing。
@page "/counter" ... 像是下面這樣撰寫。
@page "/counter" <h1>Counter</h1> <p>Current count: @currentCount</p> <button class="btn btn-primary" @onclick="@IncrementCount">Click me</button> @code { int currentCount = 0; [Parameter] private int IncrementAmount { get; set; } = 1; void IncrementCount() { currentCount += IncrementAmount; } } 就可以透過 Routing 導到該 Blazor component,像是範本內的 Counter 就可以透過 https://localhost:5001/counter 訪問。
read morePosts
MySQLTuner - High performance MySQL tuning script
MySQLTuner 是用 Perl 撰寫的腳本,可用來分析 MySQL 或是 MariaDB 的設定,給予效能上的建議。
將 MySQLTuner 下載下來。
wget https://github.com/major/MySQLTuner-perl/tarball/master 解壓縮。
tar xf master 進到解完壓縮的目錄。
cd major-MySQLTuner-perl-037f720 輸入命令可分析資料庫的設定並給予建議,只要針對最下方的建議或是前面是 !! 的下去處理即可。
./mysqltuner.pl ./mysqltuner.pl --user $user --pass $password
read morePosts
Blazor - Component parameters
若想讓 Blazor component 在畫面上使用時帶上參數做些設定,可以為 Component 加上 Parameter。
只要在 code 區塊中加入帶有 ParameterAttribute 的 property 即可。
... @code{ ... [Parameter] private int IncrementAmount { get; set; } = 1; ... } 在畫面上就可以透過 Component parameter 對 Component 做些設定。
... <Counter IncrementAmount="10" /> ... 像是 Blazor 範本的 Counter component 可以改成像下面這樣:
@page "/counter" <h1>Counter</h1> <p>Current count: @currentCount</p> <button class="btn btn-primary" @onclick="@IncrementCount">Click me</button> @code { int currentCount = 0; [Parameter] private int IncrementAmount { get; set; } = 1; void IncrementCount() { currentCount += IncrementAmount; } } 加入 IncrementAmount parameter 供外部設定,IncrementCount 方法會依照 IncrementAmount 的值去增加 currentCount。
read morePosts
Blazor - Build components
Blazor component 是 Blazor 的元件,類似控制項,是 Blazor 中可重複使用的最小單位。
Blazor component 以 razor 為副檔名,它跟 ASP.NET MVC 的 Razor page 很像,會用 HTML 與 Razor 語法排版畫面。程式碼放在 @code {…} 內,程式碼可定義 Component 會用到的變數與方法,在畫面排版那邊可取用程式碼區塊中定義的變數與方法。
這邊可參閱 Blazor 範本的 Counter 程式。程式碼那邊定義了一個 currentCount 的變數,以及一個 IncrementCount 方法,IncrementCount 方法只是很單純的將 currentCount 變數值加一。畫面這邊透過 @onclick="@IncrementCount" 指定畫面元素被按下時調用 IncrementCount 方法,並透過 @currentCount 將變數的值呈現在畫面上。
<h1>Counter</h1> <p>Current count: @currentCount</p> <button class="btn btn-primary" @onclick="@IncrementCount">Click me</button> @code { private int currentCount = 0; private void IncrementCount() { currentCount++; } } Blazor component 做好後,可以直接將它當成 HTML element 使用,像是要將剛剛建立的 Counter component 加入使用,可以像下面這樣撰寫:
read morePosts
ghz - Benchmark with template data
在用 ghz 做 gRPC 的 Benchmark 時,如果需要打入不同的測試資料,又不想要撰寫程式的話,可使用 ghz 的 Template data。
ghz 提供的 Template data 如下:
// call template data type callTemplateData struct { // unique worker ID WorkerID string // unique incremented request number for each request RequestNumber int64 // fully-qualified name of the method call FullyQualifiedName string // shorter call method name MethodName string // the service name ServiceName string // name of the input message type InputName string // name of the output message type OutputName string // whether this call is client streaming IsClientStreaming bool // whether this call is server streaming IsServerStreaming bool // timestamp of the call in RFC3339 format Timestamp string // timestamp of the call as unix time TimestampUnix int64 } 裡面有 Worker 編號、Request 編號、Method 名稱、Service 名稱、傳入的 Message 名稱、傳出的 Message 名稱、是否 Streaming、RFC3339 格式的時間、Unix 時間。
read more