什麼是建立索引?

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

在資料庫當中

  • 為了改進查詢效率,在資料量大的時候,可以透過建立索引讓資料庫加速查詢效率。
  • 如果沒有對資料表建立索引,將會使用 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

[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

×