2

セットからビンを削除しようとしています。
問題は、それらを削除しても、まだ表示されていることです

aql> show bins
+-------+------------------+-------+-----------+
| quota | bin              | count | namespace |
+-------+------------------+-------+-----------+
| 32768 | "family"         | 14    | "test"    |
| 32768 | "querybinstring" | 14    | "test"    |
| 32768 | "querybinint"    | 14    | "test"    |
| 32768 | "binstringfoo"   | 14    | "test"    |
+-------+------------------+-------+-----------+

ただし、データはセットから削除されています。

aql> select * from test.testset
0 rows in set (0.000 secs)

binNames が一意の binNames 制約の 32k 制限に達すると、問題が発生します。削除されたビン名が本当になくなるようにするには、aerospike
再起動する必要があります。

ビンを削除した後に再起動する以外に方法はありますか?
aerospike を再起動すると実際に何が起こるのですか? (削除された[削除済みとしてマークされた]ビンを削除します)

注:使用してビンを削除することでこれをテストしました

  1. client.delete()
  2. 有効期限を設定する

もう 1 つの質問 - aqlを介してセットからすべてのビンを削除する方法はありますか?

4

2 に答える 2

3
  • Aerospike でメタデータを削除する方法

Aerospike でビンのメタデータを削除する方法の適切なリストについては、このディスカッション フォーラムを参照してください。

https://discuss.aerospike.com/t/bin-names-deletion/731

  • AQL からのビンの削除

ビンを NULL に設定することで、AQL を使用してビンを削除できます。

例: namespace.set (PK, bin) 値 ('1', NULL) に挿入すると、主キーが '1' のレコードからビンが削除されます

  • 削除の一般的な理解

Aerospike は、データをインデックスと値の 2 つの部分に分けます。インデックスは常に DRAM に保存され、値は SSD または DRAM のいずれかに保存できます (永続化のためのディスクの有無にかかわらず)。レコードが削除されると、そのレコードへの参照がインデックスから削除されます。実際のデータはディスクから削除されません。別のプロセスは、ディスク上のデータが使用されていないことを検出し、スペースを再利用します。

削除されたオブジェクトが再表示される可能性があることに注意してください。これが発生するには、次のことが発生する必要があります。

ディスクからデータをロードするようにノードを構成する必要があります。また、データが削除されたが、まだディスクから削除されていない場合。(つまり、インデックス エントリが削除されました)。この場合、ノードが起動すると、ディスクからデータが読み取られ、インデックスが再構築されます。データはディスクから削除されていないため、ノードはまだアクティブであると認識し、新しいインデックス エントリを作成します。したがって、削除されたオブジェクトが返されます。ノードを停止することがわかっている場合は、高速再起動機能を使用して、削除されたデータが戻らないようにすることができます。これにより、データベース プロセスが停止した場合でもインデックスがメモリに保持されます。

新しいリリースの別のオプションは、「cold-start-empty」構成を使用することです。これは、データがディスクからロードされるのを防ぎますが、クラスター内の他のノードからの移行によってのみ行われます。

詳細はこちら: http://www.aerospike.com/docs/reference/configuration/#cold-start-empty

于 2014-12-18T20:24:09.237 に答える