今天,我將與大家分享一個基本原則,這是我在研究資料系統如何建構時不斷發現的,它以不同的形式出現,但始終服務於相同的核心目的:透過間接方式消除冗餘

在這方面,讓我向您介紹四種模式,它們都具有相同的基礎,即支援連結而不是重複。

字典編碼

字典編碼也許是最清晰的表達方式。我們不是直接儲存重複的值,而是建立一個字典(查找表),並儲存對該字典中條目的引用。

讓我們考慮一下這個陣列:

水果:[“蘋果”,“香蕉”,“蘋果”,“櫻桃”,“香蕉”,“蘋果”]

我們可以將其改造成以下內容:

字典:{0:“蘋果”,1:“香蕉”,2:“櫻桃”}

水果:[0, 1, 0, 2, 1, 0]

這樣做的好處是立即減少了儲存空間,而且我們也為每個唯一值建立了單一可信任來源。嗯,你以前在哪裡聽過這個…

資料庫規範化

資料庫規範化採用相同的原理,但將其應用於關聯式資料結構。

例如,我們不會在每個訂單記錄中重複客戶訊息,而是建立單獨的表並透過外鍵連結它們。

非規範化:

訂單:[訂單 ID、客戶名稱、客戶信箱、產品名稱、數量]

規範化:

客戶:[customer_id,姓名,電子郵件]

產品:[product_id,name,price]

訂單:[訂單號,客戶號,產品號,數量]

這不僅關乎儲存效率,也關乎資料完整性。當客戶資訊改變時,只有一個地方可以更新。我們消除了資料不一致的可能性。

字串駐留

字串駐留可確保相同的字串字面值共享相同的記憶體位置。執行時不會建立多個具有相同內容的字串物件,而是維護一個唯一字串池並傳回對現有實例的參考。

作為一個案例研究,例如,請參閱 Java 語言規範中的這個條目,它描述了它在 Java 中的工作原理。我們在Python中也發現了這個概念。最後一個例子,是一篇來自 Victoria Metrics 的文章,介紹了他們如何在解決方案中應用它。

德國弦樂

「德語字串」是一種巧妙的字串最佳化技術。此方法將 4 個字元的前綴直接儲存在字串頭中,從而避免了常見字串操作的指標解引用。其關鍵之處在於,大多數字串操作只需要檢查字串的開頭。

讓我們考慮這個完整的字串:「PostgreSQL is awesome」。

這是德語字串結構:

[長度][前綴:“Post”][指針] -> “greSQL 很棒”

這會建立一種間接模式,其中前綴可以實現快速字串比較和過濾操作而無需取消引用指針,因為大多數不匹配可以透過僅比較前幾個字元來檢測。

然而,德語字串並非總是最佳選擇。對於某些工作負載來說,每個字串的開銷可能會造成問題。正如Polar Signals團隊所描述的,對於低基數字串列(例如機場程式碼或狀態枚舉),簡單的字典編碼與德語字串相比,可以減少 75% 的記憶體佔用

結論

建立指向規範來源的連結的模式很普遍,因為它解決了基本挑戰:儲存效率、資料一致性和可維護性。

下次您在系統中遇到重複資料時,請問自己: 「我可以考慮在這裡加入一個連結嗎?」答案可能會引導您重構出更優雅、更有效率、更易於維護的解決方案。

感謝閱讀!下次見!


原文出處:https://dev.to/mcadariu/links-instead-of-repetition-4pc7


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝10   💬6   ❤️11
454
🥈
我愛JS
📝1   💬5   ❤️4
88
🥉
AppleLily
📝1   💬4   ❤️1
47
#4
💬2  
6
#5
💬1  
5
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次