Как удалить весь набор из пространства имен Aerospike?

Есть ли способ удалить набор из пространства имен (Aerospike) из AQL или CLI???

Мой набор также содержит Ldts.

Пожалуйста, предложите мне способ удалить весь набор из LDT


person E V S S Harsha    schedule 06.02.2015    source источник


Ответы (9)


Вы можете удалить набор, используя

asinfo -v "set-config:context=namespace;id=namespace_name;set=set_name;set-delete=true;"

Эта ссылка объясняет больше о том, как набор удаляется

http://www.aerospike.com/docs/operations/manage/sets/#deleting-a-set-in-a-namespace

person Anshu Prateek    schedule 06.02.2015
comment
Существует новый способ удаления наборов, доступный в Aerospike 3.12, задокументированный здесь: aerospike.com /docs/reference/info#truncate - person Brian Bulkowski; 30.03.2017

Существует новый и лучший способ сделать это в версии Aerospike Server 3.12.0, выпущенной в марте 2017 года:

asinfo -v "truncate:namespace=namespace_name;set=set_name"

Эта предыдущая команда устарела и работает только до версии Aerospike 3.12.1, выпущенной в апреле 2017 года:

asinfo -v "set-config:context=namespace;id=namespace_name;set=set_name;set-delete=true;"

Новая команда лучше по нескольким параметрам:

  • Может выдаваться во время миграций
  • Может быть выдано во время записи данных в набор
  • Достаточно запустить его только на одном узле кластера

Я использовал его в таких условиях (во время миграции, пока данные записывались, на 1 узле) и он работал очень быстро. Набор из 30 миллионов записей был уменьшен до 1000 записей примерно за 6 секунд. (Эти 1000 записей предположительно были записаны за эти 6 секунд)

Подробности здесь

person Sampras    schedule 24.10.2017

Начиная с версии Aerospike 3.12, выпущенной в марте 2017 года, в базе данных теперь поддерживается функция удаления всех данных в наборе или пространстве имен.

См. следующую документацию: http://www.aerospike.com/docs/reference/info#truncate

Которая предоставляет команду командной строки, которая выглядит так: asinfo truncate:namespace=;set=;lut=

Его также можно урезать из клиентских API, вот документация по java: http://www.aerospike.com/apidocs/java/com/aerospike/client/AerospikeClient.html и прокрутите вниз до метода "truncate".

Обратите внимание, что эта функция может дополнительно указывать время. Это позволяет вам удалять записи, а затем начинать вставлять новые записи. Поскольку используются временные метки, убедитесь, что часы вашего сервера правильно синхронизированы.

person Brian Bulkowski    schedule 30.03.2017

Вы также можете удалить набор с помощью Java-клиента следующим образом:

(1) Используйте клиентский метод «выполнить», который применяет UDF ко всем запрошенным строкам.

AerospikeClient.execute(WritePolicy policy, Statement statement, String packageName, String functionName, Value... functionArgs) throws AerospikeException

(2) Определите оператор, чтобы включить все строки данного набора:

Statement statement = new Statement();
statement.setNamespace("my_namespace");
statement.setSetName("my_set");

(3) Укажите UDF, который удаляет данную запись:

function delete_rec(rec)
    aerospike:remove(rec)
end

(4) Вызовите метод:

ExecuteTask task = AerospikeClient.execute(null, statement, "myUdf", "delete_rec")
task.waitTillComplete(timeout);

Это производительно? Неясно, но я предполагаю, что asinfo лучше. Но очень удобно для тестирования/отладки/настройки.

person Aaron    schedule 12.01.2016
comment
Я предлагаю проверить новую возможность «усечения», представленную в версии 3.12: aerospike.com/docs /ссылка/информация#truncate - person Brian Bulkowski; 30.03.2017

Вы не можете удалить набор, но вы можете удалить все записи, которые существуют в наборе, отсканировав все записи и удалив их одну за другой. Пример кода C#, который сделает свое дело:

AerospikeClient.ScanAll(null, AerospikeNameSpace, category, DeleteAllRecordsCallBack);

Здесь DeleteAllRecordsCallBack — это функция обратного вызова, в которой вы можете удалять записи одну за другой. Эта функция обратного вызова вызывается для всех записей.

private void DeleteAllRecordsCallBack(Key key, Record record)
{
    AerospikeClient.Delete(null, key);
}
person Abhinav Sinha    schedule 15.06.2016

Использование AQL:

TRUNCATE namespace_name.set_name

https://www.aerospike.com/docs/tools/aql/aql-help.html

person Nick    schedule 19.04.2020

Позаботьтесь о том, чтобы вам нужно было перезапустить свои узлы (один за другим, чтобы избежать простоев), потому что вместо этого вы не получите оставшееся место в корзинах.

Я имею в виду, что максимальное количество бинов в Aerospike составляет 32 767. Если вы просто несколько раз удаляете и воссоздаете свой набор, если он создает, например, 10000 бинов каждый раз, вы не сможете создать более 2767 бинов в четвертый раз, потому что счетчик бинов хранится в оперативной памяти.

Если вы перезапустите свой кластер, он будет освобожден.

person Emmanuel Vinet    schedule 03.07.2015
comment
Ограничение касается имен бинов, а не самих бинов, конечно. На Картах нет ограничений. Если вы используете карту внутри корзины, у вас может быть столько имен, сколько вы хотите. - person Brian Bulkowski; 31.03.2017

Вы не можете динамически удалить набор из пространства имен, например "удалить таблицу" в RDMS.

Следующая команда, использующая asinfo, только лениво удаляет данные внутри набора:

asinfo -v "set-config:context=namespace;id=namespace_name;set=set_name;set-delete=true;"

Об этом есть сообщение на сайте обсуждения aerospike, и я не увидеть прогресс по этой проблеме еще.

person sel-fish    schedule 07.05.2016
comment
Вы можете начать с Aerospike 3.12. - person Brian Bulkowski; 30.03.2017

По нашему производственному опыту специальная утилита удаления Java работает достаточно хорошо даже без недавно введенного устойчивое удаление. Собираешь из исходников, ставишь где-то рядом с кластером и запускаешь так:

java -jar delete-set-1.0.0-jar-with-dependencies.jar -h <aerospike_host> -p 3000 -s <set_to_delete> -n <namespace_name>

В нашей производственной среде холодные перезагрузки происходят довольно редко, в основном при сбое aerospike. И поток данных довольно высок, поэтому дефрагментация начинается раньше, и у нас даже нет проблемы с записью зомби.

Кстати, asinfo способ, упомянутый ранее, у нас не сработал. Записи пролежали там пару дней, поэтому воспользовались утилитой delete-set, которая сработала сразу.

person Sasha    schedule 23.11.2016