Предварительные размышления

Поскольку вялотекущая дискуссия в комментариях к посту «Прощай, Альдебаран!» не прекращается, вынесу-ка я тему бессерверных сетей в отдельный пост. Предлагаю дальнейшую дискуссию перенести сюда. :-)

Набросок описания сети

Сеть может быть реализована двумя вариантами, которые условно назовём P2P и F2F. Независимо от варианта реализации она позволяет обмениваться файлами FB2 и поддерживает некоторое подобие поиска без поисковых серверов. Поиск основан на следующих предположениях:


  • по первой букве фамилии можно получить список авторов
  • по автору можно получить список произведений
  • по произведению можно получить список версий
  • по версии можно получить файл

Структура, позволяющая решить такую задачу, реализуется DHT-подобным методом.

Вариант P2P

Клиент включается в общую сеть, находя адреса других узлов с помощью DHT. Вопрос инициализации DHT будет обсуждаться отдельно. Для поиска данных и получения нужных файлов клиент соединяется с другими узлами напрямую.

Преимуществом этого варианта является довольно высокая скорость. Недостаток же в том, что любой узел, зная название требуемого произведения, может получить IP тех пользователей, у которых эти файлы есть.

Вариант F2F

Анонимная сеть с шифрованием трафика. У каждого пользователя есть уникальный ID. Каждый пользователь раздаёт своим друзьям инвайты, тем самым разрешая им подключаться к своему узлу, и обменивается с ними открытыми ключами. Соответственно, каждый пользователь знает адреса только тех, кто непосредственно к нему подключен.

После поискового запроса пользователь получает ID тех узлов, у которых есть нужные файлы. В запросе на получение файла пользователь передаёт следующую информацию:


  • ID отправителя (свой ID)
  • ID адресата
  • хеш требуемого файла
  • свой открытый ключ

Запрос передаётся адресату по цепочке узлов. Ответ шифруется открытым ключом и по той же цепочке передаётся обратно. Ни один узел цепочки не может прочесть результат запроса (кроме того, чьим ключом он зашифрован). Ни один узел цепочки не может восстановить IP всех членов цепочки.

Преимуществом этого варианта является анонимность. Недостаток — низкая скорость обмена информацией. Для файлов FB2, в связи с их сравнительно небольшими размерами, это ещё может сработать. Для PDF или DjVu всё будет гораздо печальнее.

Угрозы

Пока были перечислены следующие угрозы:

Письма провайдерам, с которых выходят в инет наиболее крупные узлы.

В случае F2F сложно определить IP чужих узлов. В случае с P2P такое может сработать.

Фальшивые "обновленные версии" книг и клиентского софта. Фальшивые "новинки".

Мне порекомендовали в качестве способа борьбы рейтингование.

Можно ещё попробовать фидошные "эхо-бомбы" (зазипленные многогигабайтные файлы с нулями внутри) - это в случае, если на узлах происходит перепаковка книг.

Перепаковки на узлах не происходит, угроза не актуальна.

А даже и без перепаковки: пара гиг пробелов в description'е - и привет демону-каталогизатору. :(

Можно при получении книги проверять её размер в распакованном виде и, если что, бить тревогу. Опять же, рейтингование.

Disclaimer

Автору известно о том, что уже есть торренты, DC, FreeNet, Gnutella, etc. и ещё одна сеть не нужна. Известно, что всё заглохнет на этапе теоретических обсуждений. Не вызывает сомнения, что реализация натолкнётся на непреодолимые технические трудности и будет прекращена. Бесспорно, что энтузиазм разработчиков мгновенно иссякнет и они перестанут работать. И, разумеется, даже если всё получится, эта штука будет жутко неудобной и ею никто не будет пользоваться.

Поэтому будем считать, что мы тут просто обсуждаем теоретическую возможность создания такой сети. Чтобы потом, через тыщу лет, кто-то нашёл готовую инфу и сэкономил себе время. :-)

Комментарии

Цитата:
предлагаю на ты

ок, можно и на ты
Цитата:
а вот какие у других, кто в єтой сети работать будет? Для них твоя прога -просто инструмент.

Ну, защита, это требование, которое стоит по умолчанию. Удобство - тем более. Ни одна из существующих сетей не является достаточно удобной для книг. Человек хочет получить доступ к библиотеке книг. Его действия: скачать клиент, зарегистрироваться в сети, дальше он хочет получить, например, конкретную книгу. Без проблем. Набирает запрос, и узел к которому он подключился (это может быть и сервер, тк сеть гибридная) выполняет поиск по названию книги. Клиент в своей базе, а сервер в чужой. Если книга найдена - она скачивается. Если нет, то программа предложит скачать базу из другого места. Для одного файла можно послать поисковый запрос в сеть. И есть вероятность, что файл будет найден. Если брать по-максимуму, это инструмент поиска, чтения, скачивания, добавления, обсуждения, оценивания и т.п. книг.
Цитата:
жесткие требования. Нереализуемые они, ИМХО. Потому как -"обмен=поиск+скачать за 30 минут" позволяет реализовать только веб-сервер+броузер.

Размер книги в fb2 - небольшой. Даже по модему 0,2 - 5 Мб выкачивается менее 30 минут. Так что, реально все будет зависеть только от доступности файла в сети, и от желания пользователей загрузить свой канал отдачей файлов. если поиск по уже закачанной базе, то все зависит от базы и локальной машины. По сети - есть варианты. Они пока обсуждаются. Но в целом, поиск одного файла не так долог.
Цитата:
насчет защиты - тоже непонятно, потому как Либрусек, например, никто законно и не запрещает:)

На эту тему сейчас можно долго спорить. Поживем-увидим. Можно ведь и незаконно запретить. А предлагаемую сеть, чтобы полностью прикрыть, потребуется отрубить большинству пользователей доступ в интернет.
Цитата:
-юзеры все разные, например, те, которые собираются только скачивать книги(таких 90%) - у них такая же база как у тех, кто собирается заливать книги?
-основная проблема - синхронизация баз. Как это планируется.

Да, база у всех одинаковая. В том смысле, что стурктура базы одинаковая на каждой машине (программа-то для работы с ней у нас одна и та же везде). И в том смысле, что, при должном упорстве, каждый может получить почти такую же версию базы(наполнения), как и у другого участника. Для добавления книги, ее нужно будет положить в расшаренную (наподобие как у eMule) папку программы, и произвести некие манипуляции в программе. Книгу сможет добавить любой клиент, также, как и скачать.
Синхронизация - это действительно проблема. 100% синхронизации достичь почти нереально. Сверять каждый раз при подключении гигабайты данных - тоже нереально. Соотвественно, предлагается следующее. База обновляется в двух случаях: если в сети появилась новая книга, то инфа о ней расходится по клиентам, и они добавляют ее в базу. Проблемы возникают, когда клиент отключается от сети. Сохранять все обновления никто не будет, их может оказаться слишком много. Поэтому, при следующем входе программа предложит пользователю обновить базу. Ну и по его команде база "обновится". То есть, "синхронизируется" с кем-либо по выбору программы, сервера или самого пользователя. Синхронизация будет заключаться в том, что программа сверит с чужой свою базу и узнает, были ли новые поступления. Для этого предлагается к поступившей инфе о файле добавлять дату поступления. Далее, нужно будет сверять хеши файла и метаинформации, чтобы исключить дублирование. Удаленные файлы - тут все хитрее. Теоретически, в такой сети невозможно удалить файл. Его можно удалить только из собственной базы и с собственной машины. Если он куда-то ушел, то уже все, назад его уже не вернуть)) Но если он недоступен поиском достаточно долго, то можно считать, что он "пропал". Вот, вроде, более-менее понятно взаимодействие.
Цитата:
Потому как хоть база и универсальная, но у нее тоже есть структура и она задана. Читать из нее в любую другую структуру будет одинаково вне зависимости от структур тех баз, в которые производится экспорт. Разница будет только во времени записи с эти "другие структуры".

Ну, например, у нас есть две базы. Структуры абсолютно одинаковы. В одной есть данные, другая пуста. Пример данных: список книг в жанрах "фантастика" и "фэнтези" пары десятков авторов. Один автор может писать в 2-х жанрах. Итак, нам нужно: перенести все книги по жанру "фантастика" из одной базы в другую, затем перенести все книги автора, пишущего в обоих жанрах, а затем, все книги по жанру "фантастика". И в конце получить абсолютную копию исходной базы, за исключением, разве что, времени добавления каждой записи... То есть, возможность переноса базы по частям без потери изначальной структуры данных. Вот такая задачка. Вроде даже не слишком сложная.
Цитата:
здесь основная проблема в выборе метаинформации для одного файла - какая правильная, какая лучшая и т.д. Автоматом этого сделать практически невозможно.

Гм, создается новый файл fb2. Вычисляется его хэш. Дальше файл добавлется в базу и вытаскивается метаинформация. Вычисляется и ее хэш. Оба хэша также добавляются в базу. Между ними однозначное соответствие: если у метаданных другой хэш, значит и хэш файла другим окажется - они же из него взяты. И тогда это разные версии файла . А вот если хэш файла одинаковый, а метаданные разные, значит одна из записей "левая". Тогда имеет смысл восстановить метаданные из самого файла. И инфа о невалидном файле, должна, наверное, каким-то образом по сети распространиться.
Цитата:
Аннотаций и обложек не вносил.

Вот насчет аннотаций стоит подумать, мне кажется... Некоторые их даже читают!)) Но объем - ограничить. Обложки - вряд ли. Красиво, конечно, но картинки весят многовато...
Цитата:
не против, вот только как именно это все делать пока не очень понял

Цитата:
ок. с давай не с нуля. С чего?

Ну, у тебя уже есть БД, где как-то что-то складируется. Соответственно, можно использовать БД и часть написанных программ. Что-то в них изменить под вышеизложенные задачи. Как-то так. Например, если удастся копировать БД по частям на локальной машине, то и по сети это будет не намного сложнее.

Что конкретно делать, я сейчас тебе не скажу)) Нужно узнать, что Morthan по этому поводу думает, во-первых, ну и потом разобраться, кто, что и на чем делать может/будет. Может какая другая идея появиться или еще что-то...

Marked написал:
Цитата:
а вот какие у других, кто в єтой сети работать будет? Для них твоя прога -просто инструмент.

Ну, защита, это требование, которое стоит по умолчанию.
ок. Давай копать вглубь. Защита в твоем понимании - закрыть IPадрес источника скачки - я правильно понял? Если так, как это обеcпечить, если я запустил скачку и рядом - сниффер и смотрю чего оно там и откуда едет?
Marked написал:
Цитата:
жесткие требования. Нереализуемые они, ИМХО. Потому как -"обмен=поиск+скачать за 30 минут" позволяет реализовать только веб-сервер+броузер.

Размер книги в fb2 - небольшой. Даже по модему 0,2 - 5 Мб выкачивается менее 30 минут. Так что, реально все будет зависеть только от доступности файла в сети, и от желания пользователей загрузить свой канал отдачей файлов. если поиск по уже закачанной базе, то все зависит от базы и локальной машины. По сети - есть варианты. Они пока обсуждаются. Но в целом, поиск одного файла не так долог.
ключевое слово - "желание". Я исхожу из того, что 90% хочет просто качать книги и желания загрузить свой канал отдачей у них нет. Спорить на тему сознательности смысла не вижу. Значит надо заставлять отдавать. Как? И как это увязать с удобством?
Marked написал:
Цитата:
-юзеры все разные, например, те, которые собираются только скачивать книги(таких 90%) - у них такая же база как у тех, кто собирается заливать книги?
-основная проблема - синхронизация баз. Как это планируется.

Да, база у всех одинаковая. В том смысле, что стурктура базы одинаковая на каждой машине (программа-то для работы с ней у нас одна и та же везде). И в том смысле, что, при должном упорстве, каждый может получить почти такую же версию базы(наполнения), как и у другого участника. Для добавления книги, ее нужно будет положить в расшаренную (наподобие как у eMule) папку программы, и произвести некие манипуляции в программе. Книгу сможет добавить любой клиент, также, как и скачать.
Давай сначала. Например в либрусеке, написано что 220840 юзеров. Авторов файлов 1557, причем половина - только 1, итого, делают файлы 0.5% Пусть добавляют в 10 раз больше, это будет 5%.
Если у всех база будет одинакова, то есть большая вероятность, что она будет лучше приспособлена для какой-то определенной категории юзеров а для остальных - нет. Это в лучшем случае, а в худшем - плохая для всех, потому как найти компромисс очень сложно. Например, моя база хороша для библиотекаря, потому как она позволяет добавить что угодно. Но вот работать обычному юзеру с ней очень тяжко. Понятно, что если будет приложение которое будет делать все само, то оно и по барабану как база устроена, но есть большая вероятность, что из-за сложных выборок оно будет тормозить. А другая крайность - простейшая статичная база сразу тянет другие проблемы, типа, чего-то поменять в процессе функционирования, с учетом распределенной системы, будет нереально. А я сомневаюсь что изначально получится все предусмотреть. Я, например, так не смог.

Marked написал:
Синхронизация - это действительно проблема. 100% синхронизации достичь почти нереально. Сверять каждый раз при подключении гигабайты данных - тоже нереально. Соотвественно, предлагается следующее. База обновляется в двух случаях: если в сети появилась новая книга, то инфа о ней расходится по клиентам, и они добавляют ее в базу. Проблемы возникают, когда клиент отключается от сети. Сохранять все обновления никто не будет, их может оказаться слишком много. Поэтому, при следующем входе программа предложит пользователю обновить базу. Ну и по его команде база "обновится". То есть, "синхронизируется" с кем-либо по выбору программы, сервера или самого пользователя. Синхронизация будет заключаться в том, что программа сверит с чужой свою базу и узнает, были ли новые поступления. Для этого предлагается к поступившей инфе о файле добавлять дату поступления. Далее, нужно будет сверять хеши файла и метаинформации, чтобы исключить дублирование. Удаленные файлы - тут все хитрее. Теоретически, в такой сети невозможно удалить файл. Его можно удалить только из собственной базы и с собственной машины. Если он куда-то ушел, то уже все, назад его уже не вернуть)) Но если он недоступен поиском достаточно долго, то можно считать, что он "пропал". Вот, вроде, более-менее понятно взаимодействие.
это все - протокол взаимодействия, надо его формализовать.
Marked написал:
Цитата:
Потому как хоть база и универсальная, но у нее тоже есть структура и она задана. Читать из нее в любую другую структуру будет одинаково вне зависимости от структур тех баз, в которые производится экспорт. Разница будет только во времени записи с эти "другие структуры".

Ну, например, у нас есть две базы. Структуры абсолютно одинаковы. В одной есть данные, другая пуста. Пример данных: список книг в жанрах "фантастика" и "фэнтези" пары десятков авторов. Один автор может писать в 2-х жанрах. Итак, нам нужно: перенести все книги по жанру "фантастика" из одной базы в другую, затем перенести все книги автора, пишущего в обоих жанрах, а затем, все книги по жанру "фантастика". И в конце получить абсолютную копию исходной базы, за исключением, разве что, времени добавления каждой записи... То есть, возможность переноса базы по частям без потери изначальной структуры данных. Вот такая задачка. Вроде даже не слишком сложная.
у меня есть средства импорта.экспорта "пооэкземплярно" относительно объектов, а вот выборки кусками я думал, но пока что не реализовано. Оно-то да, не слишком сложно, но надо делать.
Marked написал:
Цитата:
здесь основная проблема в выборе метаинформации для одного файла - какая правильная, какая лучшая и т.д. Автоматом этого сделать практически невозможно.

Гм, создается новый файл fb2. Вычисляется его хэш. Дальше файл добавлется в базу и вытаскивается метаинформация. Вычисляется и ее хэш. Оба хэша также добавляются в базу. Между ними однозначное соответствие: если у метаданных другой хэш, значит и хэш файла другим окажется - они же из него взяты. И тогда это разные версии файла . А вот если хэш файла одинаковый, а метаданные разные, значит одна из записей "левая". Тогда имеет смысл восстановить метаданные из самого файла. И инфа о невалидном файле, должна, наверное, каким-то образом по сети распространиться.
файлы бывают не только фб2. А даже для них бывает очень много косяков. Простейший - в либрусеке ИД документа не везде имеется, у меня есть много где произведение одно, а ИДы - разные. ВОт так 2 файла и болтаются. И еще много всего бывает. А потом удаленные файлы - ты выше писал, ну удалили, а если их снова добавмли? Получается, надо иметь список хешей удаленных, чтоб по новой их не добавлять. Ну и т.п. Вобчем, формализация нужна.
Marked написал:
Цитата:
Аннотаций и обложек не вносил.

Вот насчет аннотаций стоит подумать, мне кажется... Некоторые их даже читают!)) Но объем - ограничить. Обложки - вряд ли. Красиво, конечно, но картинки весят многовато...
аннотации я планировал, даже много сложено отдельно. Вот только проблема что в импортилке в свое время я это забыл, а потом так руки допилить и не дошли, вот оно так и болтается.
Marked написал:
Цитата:
не против, вот только как именно это все делать пока не очень понял

Цитата:
ок. с давай не с нуля. С чего?

Ну, у тебя уже есть БД, где как-то что-то складируется. Соответственно, можно использовать БД и часть написанных программ. Что-то в них изменить под вышеизложенные задачи. Как-то так. Например, если удастся копировать БД по частям на локальной машине, то и по сети это будет не намного сложнее.

Что конкретно делать, я сейчас тебе не скажу)) Нужно узнать, что Morthan по этому поводу думает, во-первых, ну и потом разобраться, кто, что и на чем делать может/будет. Может какая другая идея появиться или еще что-то...

считаю, что надо начинать с формализации протокола синхронизации локальных баз.

Цитата:
ок. Давай копать вглубь. Защита в твоем понимании - закрыть IPадрес источника скачки - я правильно понял? Если так, как это обеcпечить, если я запустил скачку и рядом - сниффер и смотрю чего оно там и откуда едет?
Это - защита пользователей. У нас для этого предусматривается:
1) наличие сервера - он выступает посредником, если пользователь хочет закрыться от всех других и доверяет лишь серверу,
2) f2f-сеть - ip-адрес используется только при контакте с "друзьями". Это если он доверяет кому-то другому, а серверу и всем остальным не доверяет.
Можно использовать или один механизм или оба сразу.
Цитата:
Спорить на тему сознательности смысла не вижу. Значит надо заставлять отдавать. Как? И как это увязать с удобством?

Механизмы принуждения есть разные. Можно рейтинговать пользователей и использовать рейтинг для определения приоритетности его заявок и скорости скачивания. Мне этот способ не нравится. Есть вариант скачивания книг в базу, чтобы нельзя было из нее их удалить, и использовать ее для отдачи. Можно: только в базу, или и в базу и в файл. Можно ограничить базу по объему и др. Этот вопрос пока не обсуждался. То есть, варианты есть, но ничего конкретного еще не обсуждалось.
Цитата:
Давай сначала. Например в либрусеке, написано что 220840 юзеров. Авторов файлов 1557, причем половина - только 1, итого, делают файлы 0.5% Пусть добавляют в 10 раз больше, это будет 5%.
Если у всех база будет одинакова, то есть большая вероятность, что она будет лучше приспособлена для какой-то определенной категории юзеров а для остальных - нет. Это в лучшем случае, а в худшем - плохая для всех, потому как найти компромисс очень сложно. Например, моя база хороша для библиотекаря, потому как она позволяет добавить что угодно. Но вот работать обычному юзеру с ней очень тяжко. Понятно, что если будет приложение которое будет делать все само, то оно и по барабану как база устроена, но есть большая вероятность, что из-за сложных выборок оно будет тормозить. А другая крайность - простейшая статичная база сразу тянет другие проблемы, типа, чего-то поменять в процессе функционирования, с учетом распределенной системы, будет нереально. А я сомневаюсь что изначально получится все предусмотреть. Я, например, так не смог.

Ключевые слова "будет приложение" и "изначально все предусмотреть". Приложение как раз и будет взаимодействовать с базой и с сетью. Функциональность должна устроить как тех, так и других. Собственно, я считаю, что нужно отталкиваться от функциональности либрусека. Она большинство устраивает. По поводу торможения - это как реализовать взаимодействие. берем простейшую мультипоточность, и в отдельном потоке работа с базой, основное окно приложения другом. И пока идет выборка, в основном окне надпись, вроде "Идет выборка из базы данных, пожалуйста, подождите". Изначально придется предусмотреть максимальное количество всего. Это распространенная проблема. Предусмотреть все нельзя. Но можно предусмотреть необходимое. По поводу обновления - тут придется обновлять программу. Пользователь будет выкачивать новую версию. А потом новая версия программы будет выкачивать контент из старой базы в новую. Здесь я большой проблемы не вижу.
Цитата:
ВОт так 2 файла и болтаются.

Это уже издержки. С этим либо придется смириться, либо, например, назначать модераторов/библиотекарей, с правом удалять файлы из сети, а не только со своей машины. Через сервер это возможно. Но нужно ли - это вопрос.
Цитата:
А потом удаленные файлы - ты выше писал, ну удалили, а если их снова добавмли? Получается, надо иметь список хешей удаленных, чтоб по новой их не добавлять.

Если удалить файл из списка локальной базы, то не нужно. Клиенту приходят только сообщения о вновь добавленных файлах. Либо он скачивает обновления из чужой базы. Этот файл вряд ли окажется в обновлениях. Если же ты имеешь в виду, что некто, получив файл другим способом выкинул его обратно в сеть, и он в таком случае разошелся как новый - в теории это возможно. Но часто ли так будет? И опять же, можно на сервере сделать блек-лист хешей файлов и сверяться с ним при добавлении.
Цитата:
файлы бывают не только фб2.

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

берем форматы fb2, pdf, djvu за основные, в уме держим: fb3, rtf, doc.
Соответственно, выборку из базы производить нужно по тегам фб2, имени файла и по информации, которую можно вытащить из файлов других типов. Мне представляется, что информацию о файлах каждого типа нужно хранить в базе в отдельных таблицах, и чтобы база предоставляла возможность выборки из каждой из таблиц только по хранящейся в них инофрмации. А откуда выбирать, решал клиент. Если поиск по имени файла - из всех таблиц. А если поиск, напрммер, по ISBN - только из таблицы с fb2. Возможно, естественно, этот вопрос решить и иначе. Я все же не эксперт по БД, хотя и знаком с ними относительно неплохо, так что могу где-то что-то неправильное сказать. Вроде я примерно описал, что хочется получить.
Имитация модели макета чучела миража формализации протокола обмена на локальной машине.
-Пусть есть 2 БД А и Б с одинаковой структурой. И есть некая программа П, которая умеет читать из этих баз по команде пользователя.
1) П посылает А запрос на выборку информации по какому-то из тегов (теги заранее строго определены форматами файлов, в базе предусмотрена возможность выборки по ним).
2) А производит выборку и выдает ответ.
3) П обрабатывает ответ и приводит(возможно и не придется, это можно учесть при формировании ответа от базы А) к виду, удобному для передачи и однозначному (чтобы эти данные в базу можно было внести единственным способом).
4) П передает данные Б.
5) Б записывает данные тем самым единственным способом, чтобы они расположились точно так же/похоже на то, как в исходной базе. И сохраняет также инфу о том, запрос по какому тегу повлек за собой получение этой информации.
6) П снова формирует запрос для А с другим тегом. Для этого он запрашивает у Б, какая часть базы уже скачана.
7) Б возвращает ему тег, по которому был предыдущий запрос (в общем случае "теги" и "были", но вряд ли имеет смысл все. наверное, только наиболее общие, вроде жанра).
8)И П добавляет к запросу "выбрать" "кроме"+тег.
9) И передает А
10) А обрабатывает запрос и передает выборку П.
11) П обрабатывает и передает Б.
12) Далее, П снова хочет получить информацию по первому тегу.
13) Он запрашивает Б, та говорит, что все выкачано по этому тегу и отдает ему дату последней добавленной записи.
14) П формирует запрос к А - выбрать все, кроме более раннего, чем дата.
15) А выбирает и возвращает П,
16) П передает Б.
17) Б сохраняет.

Грубо вот как-то так это выглядеть должно.

Автоматическая рассылка о добавлении - поскольку добавление происходит не руками, а программой, то за это ответственна программа. В данном протоколе это будет выглядеть, как:
1) П добавил в А информацию.
2) П узнал о том, что он добавил новый файл
Все это никак не влияет на запросы к БД, тк все происходит внутри П.
3) П запросил у А информацию о нем,
4) затем передал Б.
Это уже соответствует описанному выше.

В сетевом же варианте вместо П будет 2 программы, которые будут обмениваться информацией между собой.
Пример: "П2 просит П1 сделать выборку из А. П1 выбирает и передает П2. П2 заносит в Б."

Marked, я запутался. Ты пишешь о сервере а потом о распределенной системе. Это ж принципиально разные подходы. В случае сервера, где есть эталонная база, снимаются все проблемы синхронизации баз. Точнее, эта задача вырождается в задачу синхронизации локальной базы с центральным сервером. А в случае распределенной системы это - ключевая проблема - ИМХО, ессно. Все что ты пишешь о синхронизации баз, касается только пары баз - это не проблема. С моей точки зрения, проблема есть в синхронизации баз в масштабах всей сети в целом. Ну вот, например, вышла новая книга Луки, и ее моментально вбросили в сеть в 100 разных местах, причем, они представляют собой, допустим, 5 разных файлов - форматы там, из разных первичных источников и т.п. Ну и первоначально это все - уникальные объекты, потому как в каждой точке они попадают впервые. По-моему, синхронизация состоит в том, чтобы через определенное время все эти 100 экземпляров "схлопнулись" в один объект "книга", привязанный к одному объекту "автор Лука" и у них связь с 5-ю экземплярами разных файлов. Как это сделается и должен обеспечить вот тот протокол. Ну а если есть сервер, то все это не надо, надо о другом думать - как защитить сервер от 1. наездов со стороны и 2. приватизации изнутри.

Ну и в таком же разрезе можно посмотреть и на остальное, например, на структуру базы. ДОпустим, все делается как ты сказал. Т.е.

Цитата:
Предусмотреть все нельзя. Но можно предусмотреть необходимое. По поводу обновления - тут придется обновлять программу. Пользователь будет выкачивать новую версию. А потом новая версия программы будет выкачивать контент из старой базы в новую. Здесь я большой проблемы не вижу.
да, обновить программу и конвертнуть базу не проблема. А вот если окажется, что из 100 узлов обновили только 20? А если с разницей в месяц-два выйдет еще одно обновление? Итого, в результате обновлений не будет вообще. Структуры базы, я имею в виду. Снова таки, в случае сервера такая проблема решается проще.

По поводу защиты, то так и надо говорить - "основана на доверии пользователей между собой". Тоже вариант.

где-то вверху мелькали слова насчет комбинированной схемы, это когда база данных централизованная, а вот сами книги передаются по сети между пользователями, я правильно понял? то может на этом и остановиться?

Цитата:
Ты пишешь о сервере а потом о распределенной системе. Это ж принципиально разные подходы. В случае сервера, где есть эталонная база, снимаются все проблемы синхронизации баз. Точнее, эта задача вырождается в задачу синхронизации локальной базы с центральным сервером. А в случае распределенной системы это - ключевая проблема - ИМХО, ессно.

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

К синхронизации базы с центральным сервером я отношусь достаточно скептически. Во-первых, когда первая тысяча узлов начнёт синхронизировать базу с сервером, загрузка серверного канала будет весьма ощутимой. Хотя, можно с сервера сбрасывать файлы обновления БД, подписанные сертификатом сервера и гарантирующие, что их создал именно сервер. А дальше уже эти блоки расходятся между узлами сети. Надо это обдумать.

Но есть ещё и во-вторых. Если мы сильно завязываемся на центральный сервер, то при его исчезновении работоспособность сети падает почти до нуля. Этого хотелось бы избежать.

Цитата:
А вот если окажется, что из 100 узлов обновили только 20?

Вчера я закончил описание примерного протокола подключения узла к сети. Согласно ему каждый узел при подключении к сети синхронизирует базу с узлами своей группы в обязательном порядке. В группе может быть максимум 256 узлов, передаются только отличия от существующей групповой БД, так что можно надеяться на небольшой трафик. Ну и с большой вероятностью обновляться будут все онлайновые узлы. А оффлайновые обновятся при переходе в онлайн.

Цитата:
По поводу защиты, то так и надо говорить - "основана на доверии пользователей между собой". Тоже вариант.

В некотором роде, да. Есть два варианта пересылки данных с узла А на узел Б. Первый — по цепочке узлов А-В-Г-Д-Е-Б. В данном случае узел А знает адрес только узла В, а узел Б — адрес узла Е. Второй способ — используя сервер в качестве посредника. Узел А передаёт на сервер запрос, куда он хочет послать данные, и получает адрес любого промежуточного звена в цепочке (пусть это будет Д). Т.о. узел А знает адрес Д, но не знает, что это именно Д. Далее данные идут по цепочке А-Д-Е-Б. То есть, немного быстрее. Ну и сопоставить адреса с ID узлов нельзя.

Цитата:
поиск книг можно вести только по автору или названию (а не по всем полям FB2).

Честно говоря, не вижу больших препятствий к поиску по всем полям, кроме как ограничение трафика в сети))
Цитата:
можно с сервера сбрасывать файлы обновления БД, подписанные сертификатом сервера и гарантирующие, что их создал именно сервер

Вот у меня была идея, чтобы сервер по запросу клиента мог искать в сети последние обновления базы и соединять клиента именно с нужным узлом. Но я не уверен, что это будет хорошо работать. Возможно введение должности "библиотекарей", которые будут собирать у себя на машине наиболее полную текущую базу, а сервер будет соединять клиента с одним из них. Про сертификаты подумать стоит, в том числе и про "знак качества" для файла...
Цитата:
Согласно ему каждый узел при подключении к сети синхронизирует базу с узлами своей группы в обязательном порядке. В группе может быть максимум 256 узлов, передаются только отличия от существующей групповой БД, так что можно надеяться на небольшой трафик.

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

Опять же, лучше по желанию пользователя и по частям. А то, может он в армию служить ушел, через год вернулся, а ему там 10Гб обновлений выкачивать надо.

Morthan написал:
Цитата:
Ты пишешь о сервере а потом о распределенной системе. Это ж принципиально разные подходы. В случае сервера, где есть эталонная база, снимаются все проблемы синхронизации баз. Точнее, эта задача вырождается в задачу синхронизации локальной базы с центральным сервером. А в случае распределенной системы это - ключевая проблема - ИМХО, ессно.

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

так не бывает. По крайней мере, до сих пор. Например, в торренте без сервера можно закончить только текущую закачку, а новую - уже не начнешь. За счет чего здесь будет по другому, я не понял.

Morthan написал:
К синхронизации базы с центральным сервером я отношусь достаточно скептически. Во-первых, когда первая тысяча узлов начнёт синхронизировать базу с сервером, загрузка серверного канала будет весьма ощутимой. Хотя, можно с сервера сбрасывать файлы обновления БД, подписанные сертификатом сервера и гарантирующие, что их создал именно сервер. А дальше уже эти блоки расходятся между узлами сети. Надо это обдумать.
именно это я имел в виду.
Morthan написал:
Но есть ещё и во-вторых. Если мы сильно завязываемся на центральный сервер, то при его исчезновении работоспособность сети падает почти до нуля. Этого хотелось бы избежать.
дык центральный сервер - понятие относительное, потому как его функция - только быть источником эталонной базы. Ну пропал один источник, так сразу же появился другой. Или какой-то сервер скомпрометировал себя, об этом прошла публикация. А народ сам себе забивает в прогу с каким сервером работать.
Morthan написал:
Цитата:
А вот если окажется, что из 100 узлов обновили только 20?

Вчера я закончил описание примерного протокола подключения узла к сети. Согласно ему каждый узел при подключении к сети синхронизирует базу с узлами своей группы в обязательном порядке. В группе может быть максимум 256 узлов, передаются только отличия от существующей групповой БД, так что можно надеяться на небольшой трафик. Ну и с большой вероятностью обновляться будут все онлайновые узлы. А оффлайновые обновятся при переходе в онлайн.

сколько времени будет выполняться такая синхронизация при сети из 100 узлов, времени нахождения узла в сети около 10%, средней скорости подключения узла 256К, объеме базы 150тыс.книг (как в либрусеке), ну а объем на одну запись пусть будет 10 Кбайт.
Morthan написал:
Цитата:
По поводу защиты, то так и надо говорить - "основана на доверии пользователей между собой". Тоже вариант.

В некотором роде, да. Есть два варианта пересылки данных с узла А на узел Б. Первый — по цепочке узлов А-В-Г-Д-Е-Б. В данном случае узел А знает адрес только узла В, а узел Б — адрес узла Е. Второй способ — используя сервер в качестве посредника. Узел А передаёт на сервер запрос, куда он хочет послать данные, и получает адрес любого промежуточного звена в цепочке (пусть это будет Д). Т.о. узел А знает адрес Д, но не знает, что это именно Д. Далее данные идут по цепочке А-Д-Е-Б. То есть, немного быстрее. Ну и сопоставить адреса с ID узлов нельзя.

ага, по-моему, про скайп я нечто подобное читал. Но передача - это одно, а база данных - совсем другое. До сих пор я предполагал, что мы говорим о содержимом базы, а для передачи книг могут использоваться любые существующие технологии. Получается, я не понял - здесь речь идет о новой распределенной сети, ориентированной одновременно и на передачу контента и обеспечивающую ведение распределенной базы. Так?

Цитата:
так не бывает. По крайней мере, до сих пор. Например, в торренте без сервера можно закончить только текущую закачку, а новую - уже не начнешь. За счет чего здесь будет по другому, я не понял.

Если память мне не изменяет, то магнитные линки на торренте как бы позволяют обойтись без сервера. Сервер (трекер) на торренте занимается исключительно координацией усилий скачивающих и раздающих, сообщает им оптимальные варианты, какой кусок кому и у кого качать. Без трекера скачивание не будет оптимальным, но будет всё равно.

Цитата:
сколько времени будет выполняться такая синхронизация при сети из 100 узлов, времени нахождения узла в сети около 10%, средней скорости подключения узла 256К, объеме базы 150тыс.книг (как в либрусеке), ну а объем на одну запись пусть будет 10 Кбайт.

Надо посчитать. Мне кажется, что всё не так страшно, как может показаться на первый взгляд. Ведь в большинстве случаев будут передаваться совсем небольшие объёмы информации. Допустим, при условии, что ничего не изменилось, будет передано 8*N байтов, где N — количество авторов в базе данных. Опять же, это в случае недоступности сервера.

Цитата:
Получается, я не понял - здесь речь идет о новой распределенной сети, ориентированной одновременно и на передачу контента и обеспечивающую ведение распределенной базы. Так?

Ну, как бы да. Существующие P2P-технологии не очень хорошо приспособлены к книгообмену. Если бы можно было обойтись существующими методами!

Morthan написал:
Цитата:
так не бывает. По крайней мере, до сих пор. Например, в торренте без сервера можно закончить только текущую закачку, а новую - уже не начнешь. За счет чего здесь будет по другому, я не понял.

Если память мне не изменяет, то магнитные линки на торренте как бы позволяют обойтись без сервера. Сервер (трекер) на торренте занимается исключительно координацией усилий скачивающих и раздающих, сообщает им оптимальные варианты, какой кусок кому и у кого качать. Без трекера скачивание не будет оптимальным, но будет всё равно.

да, правильно, я про него забыл. Сорри. Значит бывает.
Morthan написал:
Цитата:
сколько времени будет выполняться такая синхронизация при сети из 100 узлов, времени нахождения узла в сети около 10%, средней скорости подключения узла 256К, объеме базы 150тыс.книг (как в либрусеке), ну а объем на одну запись пусть будет 10 Кбайт.

Надо посчитать. Мне кажется, что всё не так страшно, как может показаться на первый взгляд. Ведь в большинстве случаев будут передаваться совсем небольшие объёмы информации. Допустим, при условии, что ничего не изменилось, будет передано 8*N байтов, где N — количество авторов в базе данных. Опять же, это в случае недоступности сервера.
передать байты - это да, быстро, только юзеры ж в сети постоянно не висят, постоянно включатся/отключаются. А книжки они ж маленькие, посему, юзер книжку себе получил - и до свидания. Надо как-то стимулировать раздачу.
Morthan написал:
Цитата:
Получается, я не понял - здесь речь идет о новой распределенной сети, ориентированной одновременно и на передачу контента и обеспечивающую ведение распределенной базы. Так?

Ну, как бы да. Существующие P2P-технологии не очень хорошо приспособлены к книгообмену. Если бы можно было обойтись существующими методами!
полностью да, а вот близкие есть, например, для множества мелких файлов применяется DC++, ну и IRC как раз под книжки популярен (говорят так, по крайней мере).

Цитата:
Надо посчитать. Мне кажется, что всё не так страшно, как может показаться на первый взгляд. Ведь в большинстве случаев будут передаваться совсем небольшие объёмы информации. Допустим, при условии, что ничего не изменилось, будет передано 8*N байтов, где N — количество авторов в базе данных. Опять же, это в случае недоступности сервера.

Если использовать предложенный мной метод, то в случае, если ничего не изменилось, будет передано сообщение, что ничего не изменилось. При условии, что в базу добавили 100 файлов, будет передан список с информацией о 100 файлах. При условии, что пользователь решил обновить только часть базы, например, по тегу "фэнтези", то ему придет только список из тех новых книг, которые имеют в дескрипшне соответствующий тег. А проверять, новые или нет - сохраняя в каждой базе дату добавления книги. Так что перекачка базы будет нужна только, если пользователь качает ее с нуля. Либо налицо явное несоответствие с текущей базой и он хочет ее всю заменить. Да и то, всю качать необязательно, можно по частям.

Цитата:
Marked, я запутался. Ты пишешь о сервере а потом о распределенной системе. Это ж принципиально разные подходы. В случае сервера, где есть эталонная база, снимаются все проблемы синхронизации баз. Точнее, эта задача вырождается в задачу синхронизации локальной базы с центральным сервером. А в случае распределенной системы это - ключевая проблема - ИМХО, ессно.

Сейчас главная идея сети в чем: есть узлы и есть сервер. Сервер управляет сетью, улучшая доступность узлов и скорость передачи. Но он ничего не хранит, кроме списка узлов (ip+id ну и еще что-нибудь, примерно, как сервер ICQ).
Цитата:
Ну а если есть сервер, то все это не надо, надо о другом думать - как защитить сервер от 1. наездов со стороны

Собственно, таким образом он защищается от наездов со стороны - он ничего не хранит, даже списка книг. Соответственно, и спросить с владельцев никак. Он только позволяет всем пользователям сети достаточно быстро соединяться между собой и предоставляет относительную анонимность.
Цитата:
и 2. приватизации изнутри.

Цитата:
где-то вверху мелькали слова насчет комбинированной схемы, это когда база данных централизованная, а вот сами книги передаются по сети между пользователями, я правильно понял? то может на этом и остановиться?

Мы как раз хотим сделать децентрализованную базу. Это и есть защита от приватизации изнутри. В нашем варианте сети, даже если сервер убрать, сеть сможет функционировать. Правда, работать будет чуть хуже.
Цитата:
С моей точки зрения, проблема есть в синхронизации баз в масштабах всей сети в целом. Ну вот, например, вышла новая книга Луки, и ее моментально вбросили в сеть в 100 разных местах, причем, они представляют собой, допустим, 5 разных файлов - форматы там, из разных первичных источников и т.п. Ну и первоначально это все - уникальные объекты, потому как в каждой точке они попадают впервые. По-моему, синхронизация состоит в том, чтобы через определенное время все эти 100 экземпляров "схлопнулись" в один объект "книга", привязанный к одному объекту "автор Лука" и у них связь с 5-ю экземплярами разных файлов. Как это сделается и должен обеспечить вот тот протокол.

Проблемы фактически нет. На самом деле, они уже не уникальны. Хэш файла уникален только для разных файлов. Мы передаем хэш файла вместе с метаинформацией. Соответственно, в любой базе, даже если в нее передастся инфа о всех 100 файлах, в списке появятся только пять. По автору они не "схлопнутся" в один объект, внутри каждой базы будут храниться список всех 5. Это - издержки. На либрусеке от хранения нескольких версий тоже не избавились. Зато выборка из базы по автору выдаст все 5 файлов. Поиском в сети также можно будет найти все 5 файлов. То есть, просто напросто нужно сравнение хэша файла при добавлении в базу. Работает примерно так: когда в сеть вбросили 100 файлов, кто-то делает поиск по сети и находит всего 5 :-) файлов, которые можно скачать из 100 разных источников.
Цитата:
да, обновить программу и конвертнуть базу не проблема. А вот если окажется, что из 100 узлов обновили только 20? А если с разницей в месяц-два выйдет еще одно обновление

Это уже тот, кто будет сетью "руководить" должен решать, стоит ли обновлять или нет. Если из 100 узлов обновили только 20, то другие не смогут синхронизировать базы и получат сообщение, что нужно обновление до более новой версии программы. Делать это слишком часто нельзя, это будет неудобно для пользователей. Поэтому, разработчики, то есть мы, не должны каждый месяц создавать мелкие обновления, а обновлять программу только в необходимых случаях, например, когда новый формат файла стал популярен, или нашли в ней серьезную уязвимость. Собственно, объем программа+база без наполнения нужно минимизировать, чтобы скачать можно было быстро.

Marked написал:
Цитата:
Ну а если есть сервер, то все это не надо, надо о другом думать - как защитить сервер от 1. наездов со стороны

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

Цитата:
где-то вверху мелькали слова насчет комбинированной схемы, это когда база данных централизованная, а вот сами книги передаются по сети между пользователями, я правильно понял? то может на этом и остановиться?

Мы как раз хотим сделать децентрализованную базу. Это и есть защита от приватизации изнутри. В нашем варианте сети, даже если сервер убрать, сеть сможет функционировать. Правда, работать будет чуть хуже.
дык зачем приватизировать базу если можно вот тот сервер, что "позволяет пользователям....". До сих пор все так и было, кстати.
Marked написал:
Цитата:
С моей точки зрения, проблема есть в синхронизации баз в масштабах всей сети в целом. Ну вот, например, вышла новая книга Луки, и ее моментально вбросили в сеть в 100 разных местах, причем, они представляют собой, допустим, 5 разных файлов - форматы там, из разных первичных источников и т.п. Ну и первоначально это все - уникальные объекты, потому как в каждой точке они попадают впервые. По-моему, синхронизация состоит в том, чтобы через определенное время все эти 100 экземпляров "схлопнулись" в один объект "книга", привязанный к одному объекту "автор Лука" и у них связь с 5-ю экземплярами разных файлов. Как это сделается и должен обеспечить вот тот протокол.

Проблемы фактически нет. На самом деле, они уже не уникальны. Хэш файла уникален только для разных файлов. Мы передаем хэш файла вместе с метаинформацией. Соответственно, в любой базе, даже если в нее передастся инфа о всех 100 файлах, в списке появятся только пять. По автору они не "схлопнутся" в один объект, внутри каждой базы будут храниться список всех 5. Это - издержки. На либрусеке от хранения нескольких версий тоже не избавились. Зато выборка из базы по автору выдаст все 5 файлов. Поиском в сети также можно будет найти все 5 файлов. То есть, просто напросто нужно сравнение хэша файла при добавлении в базу. Работает примерно так: когда в сеть вбросили 100 файлов, кто-то делает поиск по сети и находит всего 5 :-) файлов, которые можно скачать из 100 разных источников.
это серьезные издержки, именно по этой причине мне база Либрусека не нравится. Ну и, в реальности, объектов будет не 5, а гораздо больше - пойдут клоны из-за различной метаинформации, реально будет 10-даже 20 штук. Через год таких издержек в базе будет больше половины дублей. Так что надо об этом думать изначально.
Marked написал:
Цитата:
да, обновить программу и конвертнуть базу не проблема. А вот если окажется, что из 100 узлов обновили только 20? А если с разницей в месяц-два выйдет еще одно обновление

Это уже тот, кто будет сетью "руководить" должен решать, стоит ли обновлять или нет. Если из 100 узлов обновили только 20, то другие не смогут синхронизировать базы и получат сообщение, что нужно обновление до более новой версии программы. Делать это слишком часто нельзя, это будет неудобно для пользователей. Поэтому, разработчики, то есть мы, не должны каждый месяц создавать мелкие обновления, а обновлять программу только в необходимых случаях, например, когда новый формат файла стал популярен, или нашли в ней серьезную уязвимость. Собственно, объем программа+база без наполнения нужно минимизировать, чтобы скачать можно было быстро.
именно о сложности принятия решения я и говорю.

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

Ну так там же поиск был, по базе, которая на сервере! Список файлов с описанием.. А у нас на сервере - список пользователей. И все. Мы только предоставляем им возможность общаться между собой. Как ICQ почти. Там тоже можно файлы передавать. Собственно, мы с друзьями через нее несколько гигов мп3 перекачали в последнее время... И не только мы. А сервер как есть, так и остался.
Цитата:
дык зачем приватизировать базу если можно вот тот сервер, что "позволяет пользователям....". До сих пор все так и было, кстати.

ну так, кто-то другой поднимет сервер, и вся сеть пойдет к нему. А наполнение в сети как было так и останется. Она даже работу не прекратит.
Цитата:
это серьезные издержки, именно по этой причине мне база Либрусека не нравится. Ну и, в реальности, объектов будет не 5, а гораздо больше - пойдут клоны из-за различной метаинформации, реально будет 10-даже 20 штук. Через год таких издержек в базе будет больше половины дублей. Так что надо об этом думать изначально.

К сожалению, от этого вряд ли удастся избавиться. Но, учитывая распределенность данных, эта проблема чуть менее актуальна. Пока я не вижу способа сделать вменяемое слияние книг автоматическим. Нейронные сети, разве что. Так что, остаются библиотекари/модераторы и рассылка по всей сети сервисных сообщений, удаляющих "плохие, лишние" книги...

Marked написал:
издержки. С этим либо придется смириться, либо, например, назначать модераторов/библиотекарей, с правом удалять файлы из сети, а не только со своей машины. Через сервер это возможно. Но нужно ли - это вопрос.
Сдаётся мне, что таки нужно. Пока будут вандалы и неграмотные юзеры, будут нужны и библиотекари: наводить порядок среди книг, оповещать пользователей... Понадобятся фанаты.
Marked написал:
можно на сервере сделать блек-лист хешей файлов и сверяться с ним при добавлении.
Не только на сервере - чёрные, белые, красные ("wanted") и прочие списки можно рассылать и между клиентами.
Marked написал:
у нас изначально все затачивается под несколько конкретных форматов. [...] берем форматы fb2, pdf, djvu за основные, в уме держим: fb3, rtf, doc.
Я б ещё обратил внимание на NFB - он тоже силён метаинфой, но при этом не-XML'овый и требует заметно более компактного софта, не исключено, что будет популярным.
Пока форматы можно разделить на три: FB2, не-FB2 текстовые и не-FB2 бинарные. С первыми вроде ясно, со вторыми и третьими можно использовать FBD, хэшировать бинарные можно непосредственно, текстовые как-то преобразовывать (чтобы не было разночтений от переформатирования текстов, разбиения-слияния строк и т.д.).

Цитата:
Я б ещё обратил внимание на NFB - он тоже силён метаинфой, но при этом не-XML'овый и требует заметно более компактного софта, не исключено, что будет популярным.
Пока форматы можно разделить на три: FB2, не-FB2 текстовые и не-FB2 бинарные. С первыми вроде ясно, со вторыми и третьими можно использовать FBD, хэшировать бинарные можно непосредственно, текстовые как-то преобразовывать (чтобы не было разночтений от переформатирования текстов, разбиения-слияния строк и т.д.).

Первоначально я планировал обмен только FB2. Причина: в сетях F2F низкая скорость обмена информацией. Средний размер FB2-файла из моей коллекции около 1.5 мегабайт. Это терпимо. Но я с трудом представляю себе скачивание через F2F 20-мегабайтного djvu/pdf. Конечно, расставить точки над i может только опыт, но...

Morthan написал:
Цитата:
Я б ещё обратил внимание на NFB - он тоже силён метаинфой, но при этом не-XML'овый и требует заметно более компактного софта, не исключено, что будет популярным.
Пока форматы можно разделить на три: FB2, не-FB2 текстовые и не-FB2 бинарные. С первыми вроде ясно, со вторыми и третьими можно использовать FBD, хэшировать бинарные можно непосредственно, текстовые как-то преобразовывать (чтобы не было разночтений от переформатирования текстов, разбиения-слияния строк и т.д.).

Первоначально я планировал обмен только FB2. Причина: в сетях F2F низкая скорость обмена информацией. Средний размер FB2-файла из моей коллекции около 1.5 мегабайт. Это терпимо. Но я с трудом представляю себе скачивание через F2F 20-мегабайтного djvu/pdf. Конечно, расставить точки над i может только опыт, но...

это очень сужает сферу применения, потому как на фб2 свет клином очччень не сошелся. Например, в соневском магазине файлов в epub уже больше чем в либрусеке в фб2. И счас вовсю развивается русский софт под него.

С другой стороны, эти форматы сравнительно компактны, следствием чего есть то, что либу вполне можно раздавать полностью а потом обновления, как Траум делает. Да, здесь в жертву приносится оперативность доступа к новинкам, ну дык когда на либрусеке ввели месячный "отстой", то народ побухтел, но не помер. Потому как это все же лучше, чем ничего.

А вот для емких файлов типа пдф или джву создать одно хранилище, где есть все, невозможно. Например, в либгене объем уже достиг ТБ, и усе, больше на винт не влезет физически, теперь коллекцию надо как минимум делить на два хранилища на разных не просто серверах, а хостингах.

Цитата:
Первоначально я планировал обмен только FB2. Причина: в сетях F2F низкая скорость обмена информацией. Средний размер FB2-файла из моей коллекции около 1.5 мегабайт. Это терпимо. Но я с трудом представляю себе скачивание через F2F 20-мегабайтного djvu/pdf. Конечно, расставить точки над i может только опыт, но...

Ну, на мой взгляд, сеть должна поддерживать популярные форматы. С того же осла и десяток Гб скачать можно в приемлемые сроки - пару недель - если скорость подключения нормальная и раздающих много. Так что ради 20 Мб pdf или 50 Мб djvu - можно и подождать пару-тройку часов. К тому же, для сканирующих и вычитывающих обмен этими форматами может быть достаточно важен.

Цитата:
Понадобятся фанаты.

Да фанаты-то найдутся. Тут, скорее, вопрос, каким образом безопасно для сети предоставлять им такие возможности...
Цитата:
можно рассылать и между клиентами.

Я имел в виду, скорее, что сервер будет отвечать за их валидность, возможно и формировать их.

kv написал:
Защита в твоем понимании - закрыть IPадрес источника скачки - я правильно понял? Если так, как это обеcпечить, если я запустил скачку и рядом - сниффер и смотрю чего оно там и откуда едет?
Передавать зашифрованное.
kv написал:
ключевое слово - "желание". Я исхожу из того, что 90% хочет просто качать книги и желания загрузить свой канал отдачей у них нет. Спорить на тему сознательности смысла не вижу. Значит надо заставлять отдавать. Как? И как это увязать с удобством?
Кто имеет коллекцию, но не желает делиться, тому выносить устное предупреждение. На экран. Текстом вида "Вася, у тебя Петя попросил книгу Дрянцовой "Покойник в отпуске", она у тебя есть, не жмотничай!"
Если не поможет - отключать газ. :-) Не позволять скачивать книги и опять же предупреждать текстом - за что именно.
Конечно, появятся личер-моды клиентского ПО - с выкушенными предупреждалками, подделкой счётчиков отдачи и т.д. Но с ними тоже можно бороться, опыт можно перенять у ослосети.

Marked написал:
Теоретически, в такой сети невозможно удалить файл. Его можно удалить только из собственной базы и с собственной машины. Если он куда-то ушел, то уже все, назад его уже не вернуть)) Но если он недоступен поиском достаточно долго, то можно считать, что он "пропал".

Поправка: если клиенту долгое время недоступен файл, то имеет смысл объявить его "в розыск" - пусть все живые узлы опрашивают свежеподключившихся. Если это не даёт результата больше нескольких cуток - тогда тревожить библиотекарей, чтобы искали руками (в вебе, на болванках с архивами, ...), может быть, даже придётся пересканить заново. Во всяком случае, список "пропавших без вести" файлов должен быть.
Marked написал:
Гм, создается новый файл fb2. Вычисляется его хэш.
Тонкость: хэш должен считаться не из самого файла, а из его XML-представления (или хотя бы после удаления из него пробелов и символов новой строки между тэгами).
Marked написал:
и вытаскивается метаинформация. Вычисляется и ее хэш.
После аналогичного преобразования.
Marked написал:
И инфа о невалидном файле, должна, наверное, каким-то образом по сети распространиться.
Чёрный список. Согласен. Но его сначала на утверждение "библиотекарям", и только после утверждения можно рассылать клиентам запрос на удаление самого файла.
Marked написал:
насчет аннотаций стоит подумать, мне кажется... Некоторые их даже читают!)) Но объем - ограничить. Обложки - вряд ли. Красиво, конечно, но картинки весят многовато...
Аннотации нужны. Из обложек в крайнем случае можно делать thumbnail'ы: это тоже важный фактор для выбора книги. И, наверно, надо дать пользователю возможность для выбранных книг скачать полноразмерные обложки (плюс, натурально, сохранять их на некоторое время, чтобы раздать дальше, если ещё кто-то попросит).

Цитата:
Во всяком случае, список "пропавших без вести" файлов должен быть.

С этим согласен.
Цитата:
Тонкость: хэш должен считаться не из самого файла, а из его XML-представления (или хотя бы после удаления из него пробелов и символов новой строки между тэгами).

С этим не согласен. Хэш должен считаться именно из конечного файла. Это нужно для того, чтобы файл можно было скачивать одновременно с нескольких источников. Так eMule работает, кстати.
Цитата:
Чёрный список. Согласен. Но его сначала на утверждение "библиотекарям", и только после утверждения можно рассылать клиентам запрос на удаление самого файла.

Написал "наверное, каким-то образом" потому, что этот вопрос еще не обсуждался, в особенности, конкретная его реализация.
Цитата:
Из обложек в крайнем случае можно делать thumbnail'ы: это тоже важный фактор для выбора книги

Тут я вижу проблему в основном в выдирании картинок из файлов. Занимаемое thumbnail'ами место - тут считать надо. Отдельно картинки передавать - это вряд ли, они к книге должны быть привязаны.

Кстати, кроме поддержки версий книг и обмена отзывами, ещё одна функция, которую неплохо бы, чтобы распределённая библиотека представляла - это контекстный поиск по всей библиотеке ("поиск цитаты"). Гугля тут, ясен перец, вряд ли поможет (вернее, я попросту не представляю - как именно), зато каждая из машин, входящих в РБ, может устроить обыск только по небольшой части контента, что ИМХО есть гуд. :)

Имеется в виду поиск цитаты внутри текстов книг? Боюсь, что это будет нереально в предложенные системы встроить...

Системы полнотекстового поиска — это вещь совсем особенного свойства. Я когда-то в них углублённо ковырялся и могу с уверенностью сказать: думать об этом пока рано. Просматривать при каждом запросе весь контент нереально. Индексатор же штука очень сложная.

Отложим это требование на перспективу.

Кстати, почему Гугль здесь не поможет? Пока на Либрусеке есть возможность читать книги онлайн, там вполне можно найти цитату через расширенный поиск Гугля.

Morthan написал:
Системы полнотекстового поиска — это вещь совсем особенного свойства. Я когда-то в них углублённо ковырялся и могу с уверенностью сказать: думать об этом пока рано. Просматривать при каждом запросе весь контент нереально. Индексатор же штука очень сложная.

Отложим это требование на перспективу.

Кстати, почему Гугль здесь не поможет? Пока на Либрусеке есть возможность читать книги онлайн, там вполне можно найти цитату через расширенный поиск Гугля.

в качестве примера реализации можно посмотреть по моей ссылке на проект спейслиба. У него как раз предусмотрена установка поисковой машины и расписано как все это делать. Я для себя сделал вывод, что это - для настоящих маньяков, простой юзер при теперешнем состоянии инструментария такого не осилит.

Да, про спейслиб прочитал, штука интересная. Там, правда, есть некоторые особенности. В частности, не предусмотрен тот факт, что у одной книги может быть несколько версий.

А полнотекстовый поиск, как я понимаю, там реализуется через внешнюю прогу — Архивариус 300? Если так, то на свою скачанную локальную копию можно натравить любую поисковую систему, хоть от того же Гугля.

Morthan написал:
Да, про спейслиб прочитал, штука интересная. Там, правда, есть некоторые особенности. В частности, не предусмотрен тот факт, что у одной книги может быть несколько версий.

А полнотекстовый поиск, как я понимаю, там реализуется через внешнюю прогу — Архивариус 300? Если так, то на свою скачанную локальную копию можно натравить любую поисковую систему, хоть от того же Гугля.

Я понял так. Это технология работы именно с файлами. В качестве среды используется DC++. Ну и кней делаются надстройки. Основные идеи - идентификация файлов по хэшу, поиск в простейшем варианте - по именам (но они должны быть осмысленными), в более сложном варианте - индексация хранилища поисковой машиной, типа у каждого установлен свой маленький гугол:) В качестве поисковой машины используется Yandex.Server. Вот здесь обсуждение поиска при тестировании http://forum.proc.ru/index.php?showtopic=43930

Morthan написал:
почему Гугль здесь не поможет? Пока на Либрусеке есть возможность читать книги онлайн, там вполне можно найти цитату через расширенный поиск Гугля.
Вот именно. Нужен веб-сервер, предъявляющий текст книги в сеть безо всякой регистрации и позволяющий получить ID файла в нашей сети. но пока есть Либрусек и зеркала - наша сеть неактуальна, а станет актуальной - когда искать гуглем будет уже негде. :-(

вот такой еще есть подход
http://spacelib.narod.ru/news.html

Кстати, вполне возможна и другая парадигма. На основе разделения системы на несколько практически независимых подсистем.
Например, насчет рецензий\отзывов это вполне может быть самый обычный сайт, где есть только это - для тех книг что есть в базе. И гонять через сеть уже на надо. И в то же время, это стимулирует юзера искать обновление базы, потому как новые книги он сначала находит на сайте. Можно подумать насчет использования уже имеющихся проектов, типа ИМХОНЕт.

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

База данных - это за библиотекарями, вот здесь надо думать как им синхронизировать базу между собой. А юзер устанавливает прогу и для него все заканчивается - считывается база и книги сами валятся ему на комп - ессно в рамках подписки по темам\авторам и т.п. Если юзер дозрел до того, чтоб самому выкладывать книги, то есть два пути - связывайся с одним из имеющихся библиотекарей, а не хочется в помощниках ходить - то изучай как настроить ПО чтоб самому стать библиотекарем.

Да, такая система работать будет по другому, нежели веб, например, здесь нету моментальной связи, типа, рецензия (поисковый запрос)- ссылка - книга на компе. Вполне может быть что это растянется на неделю-две. Но, с другой стороны, если в сети будет много юзеров и источников, то пока юзер соберется идти на сайт искать рецензии, эти книги давно уже приехали. С третьей стороны, здесь передача по сети тоже упрощается - отпадает необходимость в поисках, главное, организовать доставку до места назначения - юзера. Тоже можно воспользоваться существующими механизмами, например, IRC, или делается плагин к торрент-клиенту, что базу понимает. Можно и свою сеть, с адресованием, узлами и т.п. - по принципу, например, старого Фидо, ессно, как надстройку над TCP/IP.

Цитата:
Например, насчет рецензий\отзывов это вполне может быть самый обычный сайт, где есть только это - для тех книг что есть в базе.

Есть вероятность, что такой сайт прикроют. Разве что, давать на нем линки на интернет-магазины, маскируясь под обычный каталог. Но контент - только наличествующий в сети...
Цитата:
База данных - это за библиотекарями, вот здесь надо думать как им синхронизировать базу между собой.

Собственно, то, как синхронизация видится мне, я уже объяснял. Здесь отличие только в том, что полная синхронизация не для всех доступна.
Цитата:
там просто знакомятся и вырабатывают вот те самые "отношения доверия".

Ну, зазвать пользователей в сеть можно откуда угодно))
Цитата:
Можно и свою сеть, с адресованием, узлами и т.п.

Вот это и обсуждается.

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

Marked написал:
Цитата:
Например, насчет рецензий\отзывов это вполне может быть самый обычный сайт, где есть только это - для тех книг что есть в базе.

Есть вероятность, что такой сайт прикроют. Разве что, давать на нем линки на интернет-магазины, маскируясь под обычный каталог. Но контент - только наличествующий в сети...
нет, потому как на этом сайте нету вообще никаких ссылок ни на кого. А ссылки есть в базе на объекты этого сайта. В принципе, базу можно натравить на любой уже существующий сайт, например ИМХонет, но здесь проблема однозначной идентификации объектов Имхонета из базы. Для этого надо знать как оно у них там в базе устроено. А узнать это снаружи не уверен что удастся.
Marked написал:
Цитата:
База данных - это за библиотекарями, вот здесь надо думать как им синхронизировать базу между собой.

Собственно, то, как синхронизация видится мне, я уже объяснял. Здесь отличие только в том, что полная синхронизация не для всех доступна.
здесь уже важно какая база. Из твоих объяснений я понял, что главный объект там - файл, метаинформация по книге - это всего-лишь производное от внутренности файла (для случая фб2) то ли его атрибутов - для всех остальных.
Marked написал:
Цитата:
Можно и свою сеть, с адресованием, узлами и т.п.

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

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

Идея насчёт вынесения части функциональности здравая и мне очень нравится. Потому что реализовать чисто DHT-шный поиск/рецензирование/обсуждение будет сложно и ненужно. Я планирую сделать в бессерверном варианте только самый базовый поиск: из списка выбрать автора, из списка его произведений выбрать книгу, из списка файлов, лежащих у разных пользователей выбрать нужный. Вот это должно работать всегда — независимо от сервера.

А всё прочее, в частности, расширенный поиск по жанрам, рецензии на книги, обсуждения на форуме — можно легко вынести на внешний сервер. Самое смешное, что его прикрывать не за что. На нём нет ни единой ссылки. Только указание точного названия книги и точного имени автора. По этой информации нужную книгу можно достать из сети самостоятельно. :-)

Страницы

X