什麼是建立索引?

某次和朋友描述建立索引,覺得自己講得很模糊,決定做一份筆記。

在資料庫當中

  • 為了改進查詢效率,在資料量大的時候,可以透過建立索引讓資料庫加速查詢效率。
  • 如果沒有對資料表建立索引,將會使用 Full table scan (sequential scans) 來查詢資料。

建立索引

  • 簡單來說:『 一個數據庫中的索引就是一本書的目錄。』
  • 原理來說:『 額外在硬碟建立一張索引表,當作目錄,當進行資料庫查詢時,針對查詢條件在索引表尋找相對應的索引。再透過此索引指向實體資料。假如查詢條件不在索引表裡,就會對整個表做循序查詢。』

[Rails] 搞懂 ActiveRecord::Enum

來自 Ruby china 精華帖

关于在 Rails Model 中使用 Enum (枚举) 的若干总结
在我使用 enum 時東找西找,挖掘一些坑
裡面提到枚舉這個詞,就是指 enum
看到該篇內容很精闢,提到很多想整理的重點
所以也筆記一份,至於詳情大家可以去看該篇文章

Enum 就是 Rails 用來消滅魔鬼數字的工具。

代碼中,以數字方式去表示數據狀態,導致代碼可讀性被破壞,這樣的數字被稱為『 魔鬼數字 』。
官方說明 enum:

Declare an enum attribute where the values map to integers in the database, but can be queried by name.

給數據庫中的整型字段聲明一個一一對應的 enum(枚舉) 屬性值,可以使用該字面作為查詢。字面

[Rails] 分辨 size vs length vs count

搞懂 size / length / count 之間的差別

stackoverflow

stackoverflow 上有這麼一段最佳留言
在每次遇到都很疑惑下,就實際測試並做個筆記

[Rails] Benchmark to test ruby code performance

當兩個相近的方法,該選擇哪一種效能比較好?
一般開發者在網路上查到結果就照著使用,沒有特別理解佐證的過程
所以來分享佐證的好工具:
benchmark - 為 Ruby Standard Library

Benchmark.measure

計算單獨的 ruby single block

1
2
3
4
5
def create_object(n)
n.times do
Object.new
end
end
1
2
3
require 'benchmark'

puts Benchmark.measure { create_object(10_000_000) }

output:

1
2
    user     system      total        real
1.270000 0.010000 1.280000 ( 1.272028)

[Rails] 真得瞭解 Active Record Lazy loading 嗎?

If inherit active record , use instance to catch value will has lazy loading

所以在 Controller or Model 都會有效果
所以宣告 instance value 不會有 sql 查詢才是

1
@account  = current_user.account

@account 被頁面調用时,才會執行 sql 去查 Account table

1
@account.balance

以上我們的認知是没有錯的,可以参考這篇

[Rails] rollback migration version

遇到 migration 進退兩難

在 localhost 或者 staging 已经部属完 migration
而當前处在错误的版本,爾後又继续建立 migrate file,中間存在很多的 migration versions
导致最後沒辦法前進 rake db:migrate ,也沒辦法後退 rollback:migrate

[Rspec] FactoryGirl create vs build vs build_stubbed

根據上一篇「測試效能最佳化」裡提到的一個概念

減少不必要的 DB 操作來提高測試效率

而其中做了以下幾件事

  1. 每支測試檔案,只做一次 clear DB 確保測試檔案之間不互相影響
  2. 可以使用一個數據進行測試,就不要每個 example 重複創建,減少 let and let! 大量使用實例變量
  3. 情境判斷,盡可能使用 mock 數據方式,達到你要的測試結果
  4. 使用 FactoryGirl.build orFactoryGirl.build_stubbed

前 3 點,已經熟能生巧
第 4 點,是我一直抱著 try try 看去實做
而今天偶然發現這兩個差別,做筆記分享一下

[Rspec] Efficiently Speed Rspec test

參考第一篇文章

author has deleted
https://medium.com/the-code-review/5-rspec-tips-to-speed-up-testing-ruby-on-rails-projects-db8759a20869

Conclusion
前面 1 ~ 4 點,學習一些技巧和寫法,但是效能提升没特別提到
但文章的第 5 點 Efficiently load data records 得到几个方向

  1. Use let, rather than let!
  2. One is to use before_all instead of before_each in a test file
  3. Another is to have a global variables file, which loads an instance of each record before all tests start
  4. Another approach is to user FactoryBot’s build_stubbed method

北漂三個月的審核

人生轉捩點

永遠記得那一天...
line接收著一堆訊息,而我手機震動起了個大早
那時也正是美國時間的晚上
朋友告訴我意外的機會向老闆引薦,獲得一個面試,要我先準備好履歷
這次是真的機會來臨,當天聊完後,心臟蹦蹦跳,無比興奮

  • 很久沒有這麼期待上班,和接下來的人生
  • 很久沒有刺激與活力,身體都不自主的打顫。
  • 我可以獲得一個全新的機會踏進,高效成長團隊!

[Rails] 掛載 AWS S3 圖床

會建議先做好,密鑰安全的功能:
figaro 安裝指南 參考這篇:[Rails] 如何安裝 figaro?

以下會以純文字記錄步驟過程

步驟一,註冊帳號,需要綁定信用卡(完成請跳過)

註冊 AWS 的帳號(需要Visa或MasterCard)

步驟二,根據AWS安全審查指南,創見IAM用戶

登入後左下角有 lanuage 可以轉換簡體 or 繁體

[Rails] 如何安裝 figaro ?

在 Rails 實做一個密鑰管理,簡單的不真實
使用 figaro 能一個指令就將機密信息同步到 heroku 上
如此一來密鑰也不會外洩。

步驟一,安裝Gem

建議開一個 branch 實做完,再 rebase 到 master
新開 branch 並切換到該branch :git checkout -b aws
編輯 Gemfile

Gemfile
1
gem 'figaro'

執行掛載 :bundle install

[Rails] 分辨 symbol 和 string

遇到 Ruby 語法上,冒號 + 變數

routes.rb
1
2
3
4
5
resources :products do
member do
post :add_to_cart
end
end

products 就叫做 symbol

什麼是 Symbol?

翻譯上,符號象徵
可以直接說是,不可改變的字串

[Rails] 分辨 collection do 和 member do

在 rails 的路由世界裡,有著非常厲害的的管理方式
當用戶端 client 做了什麼任何 http 請求 request,請求動作像是post
這樣的一個行為
會透過 rails 的 routes.rb 做一個解析
然後丟給 controller 去做判讀,再幫助使用,得到特定的畫面

當你在 routes 裡面設定:

  1. resources ,就會自動添加 7 個action ,也同時擁有 8 個 path
  2. resource ,就會不會有 #index#show
  3. 當我想要特殊路徑,或者一個特別操作處理?就得使用 collection do , member do
  4. 如果我想要創建一個,判別的後台路徑,那我可以用 namespace

[Rails] 分辨 cookie and session

在技術面試上
常常被問到的問題之一,要你區分 Cookie 和 Session ?
一般只知道
Cookie 就是存在客戶端(Client)
Session 存在服務器端

每次發起 Http 請求時,客户端都會發送相應的 cookie 信息到服務端。
它的过期时间可以任意设置,如果你不主动清除它,大部分會一直保留著
即便你關閉了電腦

[Rails] learn rack db:migrate

資料庫一直 Error? 教你 Debug 套路

  • 第一步,check schema ,是否是你要的資料庫欄位?
  • 第二步,check migrate ,是否有按照步驟,建立你的資料庫管理方法?
  • 第三步,check migrate , 符合你的欄位和邏輯,就可以刪除以下檔案
1
2
rm -rf schema.rb
rm -rf development.sqlite3
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×