Проект "Свободные голосования" http://gplvote.andyhost.ru/forum/ |
|
Метод репликации и подсчета голосов от Юрия :D http://gplvote.andyhost.ru/forum/viewtopic.php?f=5&t=343 |
Страница 5 из 6 |
Автор: | IgorK [ 22 янв 2012, 17:48 ] |
Заголовок сообщения: | Re: Метод репликации и подсчета голосов от Юрия :D |
yurial, во-первых, принадлежность (вхождение в список избирателей) конкретной УИК - это, конечно, территориальная принадлежность, но не более - не ПД. И от этих списков реально в ближайшие годы никуда не деться. Более того, представьте любое юридически значимое голосование без них - выборы главы муниципалитета, например. Кто будет иметь при этом право голоса? И, во-вторых, что самое главное, в ближайшее время именно по УИК, ТИК, ОИК будут подводиться итоги. Значит, структуру записей в БД нод и подсчет голосов все равно НЕОБХОДИМО производить по такому принципу. Или Вы предлагаете подводить итоги и так и так. Подумаешь, размеры БД, подумаешь, лишний трафик (не Вашего компа, разумеется) Вообще-то выбор принципа разбиения на группы - прерогатива заказчика голосования. Система должна предоставить любую возможность в этом смысле. БД голосов, кстати, естественно, для каждого голосования - своя (логически). Я в новой ветке расписал алгоритм - да, много букафф. Для обычных людей, не крутых прогеров, вроде Вас с Dim, именно так и надо. И желательно, с поясняющими картинками. В алгоритме не хватает "сверок" - вникайте и дописывайте, плз. |
Автор: | Dim [ 22 янв 2012, 18:06 ] |
Заголовок сообщения: | Re: Метод репликации и подсчета голосов от Юрия :D |
yurial писал(а): 1) Сбалансированность дерева зависит от распределения бит в ключах. Если вы не будите создавать ситуацию искусственно - получите сбалансированное дерево. Как интересно можно создать ситуацию искусственно с распределением бит в ключах да ещё в субъекте?yurial писал(а): Зато, для разбиения на группы, нодам не нужно контактировать друг с другом. По идее нодам в субъекте полюбому надо контактировать.yurial писал(а): 2) Не сбалансированность дерева практически никак не скажется на процедуре подсчета. В принципе да. Но и размеры групп будут разными. Группы будут делиться не пополам.У нас для голосования есть список голосовавших. Для деления можно использовать номер голосующего в этом списке. IgorK писал(а): Приведите, пожалуйста, ссылки на принятое решение в текстовом виде и/или на обсуждение(аргументы против) в форуме. Изначально планировались территориальные субъекты. Затем пришли к тому что субъекты могут совсем не касаться территорий. На данный момент территориальность определяется вхождением в соответствующий субъект.IgorK писал(а): Пожалуйста, пример реального голосования, когда требуется подведение итогов по группам нод СГ, а не по группам голосующих. Легко. Голосование по развитию программного продукта.IgorK писал(а): И, во-вторых, что самое главное, в ближайшее время именно по УИК, ТИК, ОИК будут подводиться итоги. Значит, структуру записей в БД нод и подсчет голосов все равно НЕОБХОДИМО производить по такому принципу. Или Вы предлагаете подводить итоги и так и так. Подумаешь, размеры БД, подумаешь, лишний трафик (не Вашего компа, разумеется) Это внешняя информация по отношению к человеку. Как бы вынужденно приписанная ему информация не присущая от рождения. Кроме того может меняться.
|
Автор: | yurial [ 22 янв 2012, 23:59 ] |
Заголовок сообщения: | Re: Метод репликации и подсчета голосов от Юрия :D |
Dim писал(а): yurial писал(а): 1) Сбалансированность дерева зависит от распределения бит в ключах. Если вы не будите создавать ситуацию искусственно - получите сбалансированное дерево. Как интересно можно создать ситуацию искусственно с распределением бит в ключах да ещё в субъекте?Сговор. Договорились с друзьями сгенерить ключи у которых последние биты равны 0. Создали субъект. Вступили в него. Dim писал(а): yurial писал(а): Зато, для разбиения на группы, нодам не нужно контактировать друг с другом. По идее нодам в субъекте полюбому надо контактировать.Не нужно контактировать там, где можно не контактировать. На самом деле можно сделать "контактирование" на этапе вступления в субъект. Вступил в субъект - найди свою группу и запомни их. Dim писал(а): yurial писал(а): 2) Не сбалансированность дерева практически никак не скажется на процедуре подсчета. В принципе да. Но и размеры групп будут разными. Группы будут делиться не пополам.Если ключи не будут генерироваться со спец параметрами (см. п1) то будут примерно делиться пополам. Dim писал(а): У нас для голосования есть список голосовавших. Для деления можно использовать номер голосующего в этом списке. Кажется крайне не эффективным методом. 1) У всех этот список должен быть одним и тем же; 2) Он может быть очень большим; 3) Считать сложнее. |
Автор: | yurial [ 24 янв 2012, 00:04 ] |
Заголовок сообщения: | Re: Метод репликации и подсчета голосов от Юрия :D |
Dim, еще раз подумал над твоим "оптимистичным" алгоритмом. Мне кажется он действительно заслуживает внимания, однако для его надежности необходимо хорошо продумать механизм "кричалки" о том, что результат не сошелся. ps Принимаем сам механизм разбиения на группы, основанный на битах хеша ключа? |
Автор: | Dim [ 24 янв 2012, 00:42 ] |
Заголовок сообщения: | Re: Метод репликации и подсчета голосов от Юрия :D |
yurial писал(а): Сговор. Договорились с друзьями сгенерить ключи у которых последние биты равны 0. Создали субъект. Вступили в него. Неясно выразился. Как такую ситуацию может создать коллективный автор системы?yurial писал(а): На самом деле можно сделать "контактирование" на этапе вступления в субъект. Вступил в субъект - найди свою группу и запомни их. Нашёл группу. Участвую в тайном голосовании. Из группы найденной при вступлении в субъект голосую один. Что дальше?yurial писал(а): Если ключи не будут генерироваться со спец параметрами (см. п1) то будут примерно делиться пополам. Это комбинация трёх случайностей. Ключ набор случайных бит. Люди (не)вступают в субъект тоже до некоторой степени случайно. И в конкретном голосовании тоже участвуют случайно.С какой вероятностью у вас получатся примерно одинаковые по размерам группы? yurial писал(а): 1) У всех этот список должен быть одним и тем же; Мы ведь его синхронизируем. Т.е. это одно из условий начала подсчёта.yurial писал(а): 2) Он может быть очень большим; Безразлично. Он есть.yurial писал(а): 3) Считать сложнее. Зато никаких допусков на случайности.yurial писал(а): Мне кажется он действительно заслуживает внимания, однако для его надежности необходимо хорошо продумать механизм "кричалки" о том, что результат не сошелся. Оригинальный клиент при несовпадении результата отсылает свой результат тем же образом, как и если бы он отсылал единственный результат. Оригинальный же клиент должен при получении двух результатов для одной группы либо остаётся нейтральным, либо пересчитывает результат группы и помечает ложный результат как ложный. Ещё бы наказывать подписавшего ложный результат. Например лишать права голоса в субъекте. А если продолжает настаивать, то выносить на решение внутри системы о блокировании нод принадлежащих нарушителю (или нарушителям). Что логично. Жульничать то он может только модифицированным клиентом.yurial писал(а): Принимаем сам механизм разбиения на группы, основанный на битах хеша ключа? Надо опять таки смотреть на практике. Может я правда пессимист уж очень. Пока пользователей будет немного, то можно посмотреть как их лучше делить на группы. Если группы будут получаться уж очень неравномерными, то "всегда есть варианты".
|
Автор: | yurial [ 24 янв 2012, 10:41 ] |
Заголовок сообщения: | Re: Метод репликации и подсчета голосов от Юрия :D |
Dim писал(а): yurial писал(а): Сговор. Договорились с друзьями сгенерить ключи у которых последние биты равны 0. Создали субъект. Вступили в него. Неясно выразился. Как такую ситуацию может создать коллективный автор системы?Не понял про коллективного автора. Ключи генерирует сторона клиента и он вправе выбирать каким ключом пользоваться. Он (и его товарищи) могут генерировать ключи до тех пор пока первые 5 бит не будут равны 0. Таким образом искусственно создав ситуацию неравномерного распределения. Dim писал(а): yurial писал(а): На самом деле можно сделать "контактирование" на этапе вступления в субъект. Вступил в субъект - найди свою группу и запомни их. Нашёл группу. Участвую в тайном голосовании. Из группы найденной при вступлении в субъект голосую один. Что дальше?А что бы вы сделали с другим алгоритмом? У нас всегда есть вероятность подобной ситуации. Dim писал(а): yurial писал(а): Если ключи не будут генерироваться со спец параметрами (см. п1) то будут примерно делиться пополам. Это комбинация трёх случайностей. Ключ набор случайных бит. Люди (не)вступают в субъект тоже до некоторой степени случайно. И в конкретном голосовании тоже участвуют случайно.С какой вероятностью у вас получатся примерно одинаковые по размерам группы? Предлагаю проверить :) |
Автор: | Dim [ 24 янв 2012, 11:24 ] |
Заголовок сообщения: | Re: Метод репликации и подсчета голосов от Юрия :D |
yurial писал(а): Не понял про коллективного автора. В ОС проекте сложно сделать закладку позволяющую создавать неравномерные группы. А то что пользователи генерируют ключи чтобы спецом попасть в одну группу это нас не сильно волнует.yurial писал(а): А что бы вы сделали с другим алгоритмом? У нас всегда есть вероятность подобной ситуации. Если голосующие разделяются на группы по списку проголосовавших, то такая ситуация исключается.
|
Автор: | yurial [ 24 янв 2012, 18:05 ] |
Заголовок сообщения: | Re: Метод репликации и подсчета голосов от Юрия :D |
Dim писал(а): Если голосующие разделяются на группы по списку проголосовавших, то такая ситуация исключается. Ага, но это увеличит объем траффика. А так же еще вопрос, как они будут узнавать друг о друге. Т.е. у нас есть 1 000 000 000 нод, 2 из них проголосовали, как они узнают друг о друге? Можно попробовать пойти другим путем, и наоборот, пытаться объединить группы с маленьким количеством проголосовавших, до того как будут распространены подписка о голосовании. |
Автор: | Dim [ 26 янв 2012, 01:56 ] |
Заголовок сообщения: | Re: Метод репликации и подсчета голосов от Юрия :D |
yurial писал(а): Ага, но это увеличит объем траффика. Не должно. Список голосовавших нам так и так синхронизировать. Даже не надо синхронизировать порядок. Можно просто отсортировать (по тому же ключу).yurial писал(а): Т.е. у нас есть 1 000 000 000 нод, 2 из них проголосовали, как они узнают друг о друге? Список проголосовавших будет из двух нод.yurial писал(а): Можно попробовать пойти другим путем, и наоборот, пытаться объединить группы с маленьким количеством проголосовавших, до того как будут распространены подписка о голосовании. Т.е. мы сначала разбиваем на группы. А затем по тому же принципу начинаем объединять те группы которые оказались слишком мелкими. Причём это можно повторять снова и снова только отбрасывая большие группы.Мысль интересная. Однако не избавляет нас от ситуации когда в такой группе вдруг в голосовании примет участие незначительное количество участников. |
Автор: | yurial [ 26 янв 2012, 03:13 ] |
Заголовок сообщения: | Re: Метод репликации и подсчета голосов от Юрия :D |
Dim писал(а): Однако не избавляет нас от ситуации когда в такой группе вдруг в голосовании примет участие незначительное количество участников. Пакет "подтверждение об участии" отправляется асинхронно с пакетом голоса, и может вообще не отправляться до наличия определенного количества "голосов". В том числе не отправляться до достижения кворума голосования, что сэкономит нам траффик. Как вариант: отправлять пакет "подтверждение об участии" по завершению голосования. группы строить исходя из нод принявших явное участие. На данном этапе мне видится так: Сначала все участники субъекта разбиваются на группы по N (допустим 1024). Голосуют. По окончанию голосования, все в группе знают сколько было "голосов", на основании их количества, при нехватке, начинается объединение с соседними группами. (Причем объединяться можно смело, уменьшая количество используемых для разбиения бит. Дело в том, что при равномерном распределении нод по группам, количество принимающих участие в голосовании, должно быть у всех примерно одинаковым) После объединения до приемлемого уровня, все начинают рассылать "подтверждение об участии". Дальше процесс голосования без изменений. |
Страница 5 из 6 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |