Ниже я предложу два решения: первое я сочинил сам, второе "подсмотрел" в исходниках jedis - популярного "драйвера" для подключения java-приложений к noSQL хранилищу Redis.
Решения конкретных задач программирования. Java, Android, JavaScript, Flex и прочее... Настройка софта под Linux, методики разработки и просто размышления.
Показаны сообщения с ярлыком алгоритмы. Показать все сообщения
Показаны сообщения с ярлыком алгоритмы. Показать все сообщения
четверг, 16 января 2014 г.
Делаем алгоритм шардинга. Два решения: простое и красивое
Надеюсь все знают что такое шардинг. Ну а если вы всего лишь "слышали об этом где-то", то вы по-своему счастливый человек. Шардинг данных это решение "последнего выхода", когда никакие другие оптимизации системы хранения данных вроде индексации, денормализации и кластеризации уже не помогают. При шардинге вы берёте свою таблицу (или коллекцию для noSQL) размером в десять миллионов записей и разрезаете её, к примеру, на 10 таблиц по миллиону. Эти таблицы могут лежать в разных базах (нодах) на разных серверах. Так мы получаем то, за что разработчики высоконагруженных проектов так любят шардинг: бесконечное горизонтальное масштабирование. Чтобы определить для каждой записи ноду в которую её нужно положить или где её следует потом искать мы должны реализовать алгоритм определения ноды исходя из ключа и общего числа нод. Для записей определённой структуры с заранее известным "ключевым" полем это сделать несложно. Если вы режете таблицу пользователей с инкрементным id в качестве ключа, то можно просто определить диапазоны id для каждой ноды. То же самое при разбиении набора записей с датой в качестве ключа. Но возьмём тяжёлый случай: ключ имеет произвольную структуру. Это не последовательное число и не дата. Просто строка. Как гарантированно отнести такой ключ к определённой ноде?
пятница, 13 июля 2012 г.
Помехоустойчивое кодирование: реализуем алгоритм Хэмминга на java
В давние суровые времена, окутанные романтикой и легендами, программисты решали совсем другие задачи. Чего стоит, например, передача данных. Мы, скромные наследники гениев, работаем как правило не ниже уровня сокетов. А им приходилось измерять уровни сигнала, а ошибки измерений корректировать. Остались нам от них в наследство десяток алгоритмов коррекции ошибок разной сложности и мощности. Алгоритм Хэмминга достаточно "компромиссный" вариант. При относительной простоте он весьма эффективен: позволяет скорректировать ошибки в один бит на блок и обнаружить ошибки в два бита. Зачем нам может понадобиться его использовать? Например мы решили организовать передачу данных между двумя устройствами "нетрадиционным" способом. Сходу можно придумать три способа передачи данных между двумя Android-смартфонами: с помощью экрана и камеры, динамика и микрофона, вибрации и акселерометра. Как это применить - дело вашей фантазии, а вот как решить проблему коррекции ошибок при этом - подскажет моё маленькое приложение. Давайте рассмотрим реализацию алгоритма подробнее.
Подписаться на:
Сообщения (Atom)

