6

私は単純な Jena データセットを使用しています。このデータセットには、〜 30 MB の RDF ファイルが 1 つしかインポートされていません。アプリケーションの一部として、ユーザーがデフォルト グラフ (または名前付きグラフ) をクエリし、クエリの結果のトリプルを新しい名前付きグラフに挿入できるようにしようとしています。このため、CONSTRUCT ステートメントを使用してトリプルの結果セットを RDF 形式で形成し、これらのトリプルを (QueryExecution.execConstruct() を使用して) 新しいモデルに入れ、このモデルをデータセットに追加します。これは、データセットが新しいグラフ ノードを取得し、TDB データベース フォルダーのディスク サイズが大きくなるため、再び機能するように見えます。

データセットから名前付きグラフを削除しようとすると、ここで問題が発生します。Dataset の removeNamedName("graphName") メソッドを使用して、データセットからモデルを削除します。そのモデル名に対する今後のクエリは、それが正常に削除されたことを明らかにします。ただし、TDB データベース フォルダーのディスク サイズは、同期して終了した後でも同じサイズのままです。

最初は、新しいデータが入ったときに上書きできるように、データベースが削除されたファイルのスペースを空きとしてマークしているだけだと思っていましたが、そうではないようです。同じプログラム実行で名前付きグラフを削除してすぐに置き換えると、フォルダーは大きくならないようですが、新しい名前付きグラフを追加して同じ実行で削除すると、フォルダーのサイズが大きくなり、モデルが削除してもメモリは解放されません。つまり、数回実行すると、データベース フォルダは元のサイズの 5 倍から 10 倍になり、データが保持されなくなります。

どんな洞察や助けも素晴らしいでしょう、ありがとう。

4

1 に答える 1