リレーショナルデータベースにおける多態的データの5つのモデリング方法

2025-07-09
リレーショナルデータベースにおける多態的データの5つのモデリング方法

この記事では、リレーショナルデータベースにおける多態的データのモデリング手法として、単一テーブル、NULL許容外部キー、タグ付きユニオン、子から親への外部キー、JSONの5つのアプローチを探ります。それぞれの方法には長所と短所があり、例えば、単一テーブルアプローチはシンプルですが速度が遅くなる可能性があり、JSONは拡張しやすいですがデータ検証がありません。著者は、可読性、保守性、デバッグの容易さを重視し、最適化は後回しにすることを提案しています。

続きを読む

多重発見:Prolly Trees の事例

2025-07-01
多重発見:Prolly Trees の事例

Doltにとって重要な新規データ構造であるProlly Treesは、一度ではなく、少なくとも4回独立して発明されました。2009年のAvery Pennarunによるbupプロジェクト(Nomsに先立つ)、2015年のNomsによる用語の命名、2019年のInriaによる「Merkle Search Trees」、2020年のDePaul大学による「Content-Defined Merkle Trees」など、同じ基本的なデータ構造が異なるコンテキストで繰り返し登場しました。これは、科学における多重発見という一般的な現象を強調し、技術革新における需要の役割を浮き彫りにしています。DoltHubの著者たちは、この現象とその将来の技術への影響について、Prolly Treesに関する自身の経験をケーススタディとして議論しています。

続きを読む
開発 多重発見

Doltのgo-mysql-server 5周年:クエリジャーニー

2025-04-27
Doltのgo-mysql-server 5周年:クエリジャーニー

この記事では、Doltがgo-mysql-serverを採用して5周年を迎えたことを受け、そのSQLエンジンの内部動作を詳細に解説しています。クエリのパースから結果のスプーリングまでの過程を、パース、バインディング、プランの簡素化、結合の探索、コストベースの最適化、実行といったステップに分けて説明しています。Doltは、左再帰パーサーとボトムアップ動的計画法を用いてクエリプランの最適化を行い、コストモデルを用いて最適な実行戦略を選択します。また、メモリ管理と将来的な最適化の方向性についても議論しており、中間表現の統一やメモリのチャーン削減などが挙げられています。

続きを読む
開発

Goの驚くべきメモリ割り当ての罠:30%の性能低下物語

2025-04-21
Goの驚くべきメモリ割り当ての罠:30%の性能低下物語

Goプロジェクトにおける一見無害なリファクタリングが、30%の性能低下を引き起こしました。犯人は`ImmutableValue`構造体の`GetBytes`メソッドで、値レシーバーを使用していたため、毎回ヒープ割り当てが行われていました。ヒープ割り当てはスタック割り当てよりもはるかにコストが高くなります。根本原因は、Goコンパイラのエスケープ解析の精度が低く、値レシーバーがエスケープしないことを認識できなかったことです。ポインタレシーバーに変更することで問題が解決しました。このケースは、Goコンパイラのメモリ割り当ての決定を理解し、適切なレシーバータイプを使用することの重要性を示しています。

続きを読む
開発

Cursor:AIコードエディター ― 噂と現実

2025-03-29
Cursor:AIコードエディター ― 噂と現実

Doltデータベースの開発者が、AIコードエディターCursorを試して、10倍の生産性向上という評判が本当かどうかを検証しました。大規模なコードベースでCursorを使用してみたところ、最初の印象は悪く、デバッグが非常に面倒でした。しかし、新しいプロジェクトを作成する際には、Cursorは優れた性能を発揮し、数時間でFactorioのModを作成することができました。仕事のプロジェクトで使用した際には、基本的な機能のコード生成は効率的でしたが、コードの品質向上には多くのリファクタリングが必要でした。最終的に、著者はCursorによって生産性が約50%向上したと結論付け、宣伝されている10倍には程遠い結果となりました。複雑なコードの処理や既存のコードベースの理解において、Cursorにはまだ改善の余地があることを指摘しています。

続きを読む