私はSQLデータベースの独自のtriplestore ontopを実装しようとしています(はい、そこにプロジェクトが完成していることは分かります)。シンボリックな "アトム"を実装する最良の方法を決定しようとしています。 。Triplestore Atomの実装
純粋な設計では、subject、predicate、objectという3つのvarcharカラムを持つ単一の「トリプル」テーブルを作成して、SQLでトリプルストアを実装することがあります。スペースを節約するため、私は "atom"テーブルを作成しました。これは、任意の件名/述語/オブジェクトフィールドで使用される一意のテキストを格納し、それらのフィールドをテキストを含むアトムにリンクする外部キーに変更します。
しかし、私はAtomテーブルを実装するいくつかの方法を見ています。
テキストをvarcharとして保存します。
- 長所:テキストを一意に索引付けして強制することが簡単です。
- 短所:任意の大きなテキストを保存できませんでした。
テキストをテキストブロブとして保存し、一意性を照会して実施するときに使用するテキストのハッシュとして保存します。
- 長所:任意の大きなテキストを保存できました。
- 短所:少し複雑です。おそらく、まれではあるが、ハッシュの衝突はハッシュアルゴリズム(md5、shaなど)に依存します。パフォーマンス、長期信頼性、およびあらゆる種類のデータを格納する機能の面でより良いアプローチです
?ハッシュを使用している場合、衝突について有効な懸念がありますか?たとえ衝突が稀であっても、トリプルストアを壊すためには一度しか起こらないでしょう。
スペースだけではありません。私がオンラインで読んだ記事のほとんどは、整数を使ったレコードの結合と一致が、文字列経由よりもずっと速いことを示しています。あなたの考え?私は非常に基本的なSparQLエンジンを作成しました。基本的なクエリの場合でも、たくさんのSQL結合を生成します。モデルをリファクタリングして測定し、それを旧バージョンと比較するまでボトルネックかどうかをどのように判断するのですか? – Cerin
@Cerin: "整数を使ってレコードを結合して照合するのは、常にビア文字列よりも高速です"。正しい。誰もがそれを言う。 「それがボトルネックかどうかはどうすればわかりますか?あなたのアプリケーションが遅すぎると、それがプロファイリングされてSQLが問題であると判断されたとき。プロファイリングとはパフォーマンスを測定する方法です。リファクタリングと再実装はありません。 –
@Cerin:「スペースは唯一の問題ではない」それでも。あなたの質問は「スペースを節約するため」から始まり、「任意に大きなテキスト」に関する多数の点が含まれていました。スペースだけが問題でない場合は、あなたの質問をすべて修正して、あなたの懸念事項をすべて特定してください。 –