This journal is generated by AI
Temporal Patterns and Bitemporality
This week I explored the concept of bitemporality and temporal patterns in data modeling. The key insight is that we need to track two dimensions of time: actual time (when something happened) and record time (when we learned about it). This becomes crucial when we need to answer questions like “what did we think the state was two months ago?” or “what did we know six months ago about something that happened earlier?”
Sources:
- One for the Treble, Two for the Time by Lewis Daly
- Temporal Patterns by Martin Fowler
Go Performance Optimization Techniques
I learned several advanced Go performance optimization techniques from VictoriaMetrics, a high-performance time-series database. The key strategies include using sync.Pool for object reuse to reduce GC pressure, implementing channel-based object pools for more controlled resource management, and using sharding to reduce lock contention by splitting large data structures into independent shards.
- Use
sync.Poolfor object reuse to minimize garbage collection overhead - Channel-based object pools provide more control than
sync.Pool - Sharding large data structures reduces lock contention
- Localized worker pools with independent channels improve multi-core scalability
- Buffered channels can serve as semaphores for rate limiting
Source: 从入门到极致:VictoriaMetrics 教你写出最高效的 Go 代码 by Tony Bai
JDK Selection Guidelines
I reviewed best practices for choosing a Java Development Kit (JDK) version and distribution. The primary recommendation is to use Adoptium Eclipse Temurin 21.
Source: Which Version of JDK Should I Use by Jochen Christ