Как я удаляю/считаю объекты в s3 блоке?

Это известно как' Вес Hamming ', 'popcount' или 'поперечное дополнение'.

'лучший' алгоритм действительно зависит, на котором ЦП Вы идете и каков Ваш шаблон использования.

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

предварительно заполненный метод поиска по таблице А может быть очень быстрым, если Ваш ЦП имеет большой кэш, и/или Вы делаете много этих инструкций в жестком цикле. Однако это может пострадать из-за расхода 'неудачного обращения в кэш', где ЦП должен выбрать часть таблицы от оперативной памяти.

, Если Вы знаете, что Ваши байты будут главным образом 0 или главным образом 1's тогда, существуют очень эффективные алгоритмы для этих сценариев.

я полагаю, что очень хороший алгоритм общего назначения следующий, известен как 'параллель' или 'переменная точность алгоритм SWAR'. Я выразил это на подобном C псевдо языке, Вы, возможно, должны скорректировать его для работы на конкретный язык (например, использующий uint32_t для C++ и>>> в Java):

int numberOfSetBits(int i)
{
     // Java: use >>> instead of >>
     // C or C++: use uint32_t
     i = i - ((i >> 1) & 0x55555555);
     i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
     return (((i + (i >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24;
}

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

Этот поразрядный-SWAR алгоритм мог параллелизировать, чтобы быть сделанным в нескольких векторных элементах сразу, вместо в единственном целочисленном регистре, для ускорения на центральных процессорах с SIMD, но никакой применимой popcount инструкцией. (например, код x86-64, который должен работать на любом ЦП, не просто Nehalem или позже.)

Однако лучший способ использовать векторные инструкции для popcount обычно при помощи переменной перестановки, чтобы сделать поиск по таблице для 4 битов во время каждого байта параллельно. (4 бита индексируют 16 таблиц записи, сохраненных в векторном регистре).

На Intel CPUs, аппаратные средства 64 бита popcnt инструкция могут превзойти по характеристикам реализация разрядной параллели SSSE3 PSHUFB приблизительно фактором 2, но [только 115], если Ваш компилятор получает его просто право . Иначе SSE может выйти значительно вперед. Более новые версии компилятора знают popcnt ложная зависимость проблема на Intel.

Ссылки:

https://graphics.stanford.edu/~seander/bithacks.html

https://en.wikipedia.org/wiki/Hamming_weight

http://gurmeet.net/puzzles/fast-bit-counting-routines/

http://aggregate.ee.engr.uky.edu/MAGIC/#Population%20Count%20 (Ones%20Count)

9
задан Brian Tompsett - 汤莱恩 2 July 2015 в 18:02
поделиться

4 ответа

1) Что касается вашего первого вопроса, вы можете перечислить элементы в корзине, фактически не извлекая их. Вы можете сделать это как с помощью SOAP , так и REST API. Как видите, вы можете определить максимальное количество элементов для списка и позицию, с которой будет начинаться список (маркер). Подробнее об этом здесь .

Я не знаю ни одной реализации пейджинга, но особенно для интерфейса REST было бы очень легко реализовать его на любом языке.

2) I считаю, что единственный способ удалить ведро - сначала очистить его от всех элементов. См. Также этот вопрос .

3) Я бы сказал, что S3 очень хорошо подходит для хранения большого количества файлов. Однако это зависит от того, что вы хотите сделать. Планируете ли вы также хранить двоичные файлы? Вам нужно выполнить какие-либо запросы или достаточно просто перечислить файлы?

0
ответ дан 5 December 2019 в 02:08
поделиться

Вы можете сделать это:

#define MAKE_LABEL() \
do {                 \   
my_cool_label:       \
/* some stuff */;    \
goto my_cool_label;  \
/* other stuff */;   \
} while (0) 

Это сохраняет область видимости метки локальной, позволяя любое их количество внутри основного макроса.

Если вы хотите, чтобы метки были доступны более глобально, непонятно, как ваш макрос "MAKE_FUNNY_JUMPING_LOOP" ссылается на эти ярлыки. Вы можете объяснить?

но никогда не беспокоился о восстановлении / удалении / управлении файлами. Для этого используйте Bucket Explorer, который сделал все, что мне нужно. В моем случае не стоило тратить время, когда за 50 долларов я могу получить программу, которая делает все, что мне нужно. Вероятно, есть и другие, которые делают то же самое (например, CloudBerry)

В вашем случае с Bucket Explorer вы можете щелкнуть правой кнопкой мыши по ведру и выбрать удаление или щелкнуть правой кнопкой мыши и выбрать свойства, и он будет считать количество объектов и размер они берутся. Конечно, он не загружает весь объект. (Например, последнее ведро, которое я смотрел, было 12 ГБ и около 500 файлов, и для загрузки 12 ГБ потребовалось бы несколько часов, тогда как размер и количество возвращаются через секунду или две). И если есть предел, то это точно не 1000.

Надеюсь, это поможет.

Для этого используйте Bucket Explorer, который сделал все, что мне нужно. В моем случае не стоило тратить время, когда за 50 долларов я могу получить программу, которая делает все, что мне нужно. Вероятно, есть и другие, которые делают то же самое (например, CloudBerry)

В вашем случае с Bucket Explorer вы можете щелкнуть правой кнопкой мыши по ведру и выбрать удаление или щелкнуть правой кнопкой мыши и выбрать свойства, и он будет подсчитывать количество объектов и размер они берутся. Конечно, он не загружает весь объект. (Например, последнее ведро, которое я смотрел, было 12 ГБ и около 500 файлов, и для загрузки 12 ГБ потребовалось бы несколько часов, тогда как размер и количество возвращаются через секунду или две). И если есть предел, то это точно не 1000.

Надеюсь, это поможет.

Для этого используйте Bucket Explorer, который сделал все, что мне нужно. В моем случае не стоило тратить время, когда за 50 долларов я могу получить программу, которая делает все, что мне нужно. Вероятно, есть и другие, которые делают то же самое (например, CloudBerry)

В вашем случае с Bucket Explorer вы можете щелкнуть правой кнопкой мыши по ведру и выбрать удаление или щелкнуть правой кнопкой мыши и выбрать свойства, и он будет считать количество объектов и размер они берутся. Конечно, он не загружает весь объект. (Например, последнее ведро, которое я смотрел, было 12 ГБ и около 500 файлов, и для загрузки 12 ГБ потребовались бы часы, тогда как размер и количество возвращаются через секунду или две). И если есть предел, то это точно не 1000.

Надеюсь, это поможет.

Вероятно, есть и другие, которые делают то же самое (например, CloudBerry)

В вашем случае с Bucket Explorer вы можете щелкнуть правой кнопкой мыши по ведру и выбрать удаление или щелкнуть правой кнопкой мыши и выбрать свойства, и он будет подсчитывать количество объектов и размер они берутся. Конечно, он не загружает весь объект. (Например, последнее ведро, которое я смотрел, было 12 ГБ и около 500 файлов, и для загрузки 12 ГБ потребовались бы часы, тогда как размер и количество возвращаются через секунду или две). И если есть предел, то это точно не 1000.

Надеюсь, это поможет.

Вероятно, есть и другие, которые делают то же самое (например, CloudBerry)

В вашем случае с Bucket Explorer вы можете щелкнуть правой кнопкой мыши по ведру и выбрать удаление или щелкнуть правой кнопкой мыши и выбрать свойства, и он будет подсчитывать количество объектов и размер они берутся. Конечно, он не загружает весь объект. (Например, последнее ведро, которое я смотрел, было 12 ГБ и около 500 файлов, и для загрузки 12 ГБ потребовались бы часы, тогда как размер и количество возвращаются через секунду или две). И если есть предел, то это точно не 1000.

Надеюсь, это поможет.

(Например, последнее ведро, которое я смотрел, было 12 ГБ и около 500 файлов, и для загрузки 12 ГБ потребовались бы часы, тогда как размер и количество возвращаются через секунду или две). И если есть предел, то это точно не 1000.

Надеюсь, это поможет.

(Например, последнее ведро, которое я смотрел, было 12 ГБ и около 500 файлов, и для загрузки 12 ГБ потребовались бы часы, тогда как размер и количество возвращаются через секунду или две). И если есть предел, то это точно не 1000.

Надеюсь, это поможет.

1
ответ дан 5 December 2019 в 02:08
поделиться

«Список» не извлекает данные. Я использую s3cmd (сценарий python), и я бы сделал что-то вроде этого:

s3cmd ls s3://foo | awk '{print $4}' | split -a 5 -l 10000 bucketfiles_
for i in bucketfiles_*; do xargs -n 1 s3cmd rm < $i & done

Но сначала проверьте, сколько файлов bucketfiles_ вы получите. Для каждого файла будет выполняться один s3cmd.

Это займет время, но не дни.

1
ответ дан 5 December 2019 в 02:08
поделиться

У меня была такая же проблема с удалением сотен тысяч файлов из корзины. Возможно, стоит запустить экземпляр EC2 для выполнения параллельного удаления, поскольку задержка для S3 мала. Я думаю, что нужно заработать немного денег на хостинге нескольких серверов EC2 и взимании платы с людей за быстрое удаление корзин. (По крайней мере, пока Amazon не изменит API)

0
ответ дан 5 December 2019 в 02:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: