Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Коллективная работа над документом

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
SunChase
Отправлено: 02 Октября, 2011 - 13:38:26
Post Id



Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Июль 2010  


Помог: 0 раз(а)




Доброго времени суток.

Нужна ваша помощь по формированию теоретической части.

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

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

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

Отсюда к вам следующие вопросы:

1) В правильном ли направлении я начал формировать идею?
2) Можно ли гдето оптимизировать?(ну и собственно "КАК")
3) Есть ли идеи касательно той части, где будет использоваться полная правка документа?
4) Не "загнётся ли" БД от такого к-ва записей на каждый документ?

Заранее благодарен за любые дельные советы и предложения.
 
 Top
Champion Супермодератор
Отправлено: 02 Октября, 2011 - 13:50:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




А вариант воспользоваться существующими системами контроля версий типа svn или git не подходит? Сами-то Вы вряд ли лучше сделаете
 
 Top
SunChase
Отправлено: 02 Октября, 2011 - 14:07:23
Post Id



Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Июль 2010  


Помог: 0 раз(а)




Заманчиво. Но насколько я понял из Википедиевского описания, это система контроля версии файла. У меня же задача заключается в создании внутри веб-сайта инструмент по созданию документов и коллективной работы над ними. Возможно я неправильно понял чтото, тогда попрошу поправить.
 
 Top
White
Отправлено: 02 Октября, 2011 - 14:33:26
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011  
Откуда: Днепропетровск


Помог: 28 раз(а)




SunChase а документ - это не файл?


-----
if(time()>1356048000) die();
 
 Top
Champion Супермодератор
Отправлено: 02 Октября, 2011 - 14:40:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




SunChase пишет:
внутри веб-сайта инструмент по созданию документов и коллективной работы над ними.
гуглдокс)
 
 Top
SunChase
Отправлено: 02 Октября, 2011 - 15:04:37
Post Id



Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Июль 2010  


Помог: 0 раз(а)




Champion пишет:
гуглдокс)


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

White пишет:
SunChase а документ - это не файл?


в данном случае я использовал слово документ в значении как отдельная веб страница.
 
 Top
sergtka4ov
Отправлено: 02 Октября, 2011 - 15:32:45
Post Id



Новичок


Покинул форум
Сообщений всего: 35
Дата рег-ции: Май 2010  


Помог: 0 раз(а)

[+]


Я бы реализовал так, описываю упрощенно — В таблице:

id — документа
version — версия правки
data — дата
fulltext — сам документ, текущая, последняя версия

В базе храним последнюю версию, а предыдущие версии просто скидывать в файл, и в имени файла писать id-version-data

соответственно у каждой правки будет свой файл с id, уже своей version и своей data

в любой момент можно из файла загрузить любую версию - править её и сохранить как свою или как новую ГЛАВНУЮ, и после окончательного утверждения документа - предыдущие правки можно удалять.

(Отредактировано автором: 02 Октября, 2011 - 15:44:38)

 
 Top
SunChase
Отправлено: 02 Октября, 2011 - 16:37:10
Post Id



Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Июль 2010  


Помог: 0 раз(а)




sergtka4ov пишет:
fulltext — сам документ, текущая, последняя версия


ну а если fulltext - это 100 страниц А4, набитые текстом? Не "загнётся" ли система, выгружая из базы это всё одним куском?
 
 Top
Champion Супермодератор
Отправлено: 02 Октября, 2011 - 17:26:34
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




можно еще добавить столбец "страница". Одна запись - одна страница. Размер страницы сделать к примеру 1000 символов. Если не помещается, создавать новую страницу. А при изменении страницы можно будет создавать новую версию только этой страницы. Тогда напрашивается еще столбец "дата создания версии". Тогда версия документа, актуальная на такую-то дату будет состоять из самых последних версий страниц с максимальной датой, не превосходящей интересуемую.
Только нужно предусмотреть то, что изменение на страницах могут приводить к переползанию текста между страницами - в этом самая большая трудность. Но на то она и дипломная работа, чтобы подмать и сделать.
 
 Top
SunChase
Отправлено: 02 Октября, 2011 - 17:39:38
Post Id



Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Июль 2010  


Помог: 0 раз(а)




Champion пишет:
можно еще добавить столбец "страница". Одна запись - одна страница. Размер страницы сделать к примеру 1000 символов. Если не помещается, создавать новую страницу. А при изменении страницы можно будет создавать новую версию только этой страницы. Тогда напрашивается еще столбец "дата создания версии". Тогда версия документа, актуальная на такую-то дату будет состоять из самых последних версий страниц с максимальной датой, не превосходящей интересуемую.


SunChase пишет:
В связи с тем, что размеры документа могут достигать большого размера(к примеру 100 страниц) то была идея "разбивать" текст на отдельные страницы и помещать отдельными записями в таблицу, что в теории должно облегчить нагрузку на сервер при любых операциях.

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



----

Champion пишет:
Только нужно предусмотреть то, что изменение на страницах могут приводить к переползанию текста между страницами - в этом самая большая трудность.


SunChase пишет:
Но "завис" на вопросе если нужна полная правка документа, с изменением к-ва страниц, да и самого содержимого некоторых страниц. Допустим, человек после долгой правки решает вставить ещё один абзац посреди документа. Я подумывал о варианте полного пересоздания документа, отлучаясь от предыдущей версии и её истории. Но почемуто мне кажется что есть более простой способ.


На этом то я и завис...
 
 Top
Champion Супермодератор
Отправлено: 02 Октября, 2011 - 17:57:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Не внимательно прочитал, извиняюсь.
SunChase пишет:
мне кажется что есть более простой способ.
Думаю, что нету. Ну диплом делается почти весь год - есть время подумать.
Есть небольшая мысль, но ее надо додумывать. Минимизировать количество обработки, связанной с переползанием текста можно так: хранить еще 2 столбца: начальная позиция страницы в тексте и длина страницы. Тогда будет более фиксированное количество страниц и только время от времени будет необходимо разбивать разросшиеся страницы или сильно уменьшмвшиеся. Т.е. проводить сборку мусора что ли.
При этом, если Вы показываете пользлователю данные порциями по 1000 символов (для пользователя страница - это 1000 символов), то чтоб показать текст с 5000 смещения (5 страницу) 1000 символов, нужно считать строку данных, которая включает в себя 5000 смещение (например, начинается с 4900) и при необходимости, следующую.
Такой вариант должен быть быстрее и при отображении, и при сохранении, но сложнее в реализации, особенно, при получении снимка документа на определенную дату.
Еще нужно хранить столбец, который будет содержать айдишку родительской страницы, когда Вы разбиватете одну страницу на 2 новые и столбец, в который можно будет записать айдишку вновь появившейся строки, если Вы их склеиваете.
Можно много всего интересного придумать.

Просто пересохранять документ - просто в реализации, но медленно. Думать о переползающем тексте - сложно и он долго будет переползать по сравнению с изменением 2 интегеровских значений в нескольких столбцах(смещение и длина) в нескольких строк.
 
 Top
sergtka4ov
Отправлено: 02 Октября, 2011 - 18:19:36
Post Id



Новичок


Покинул форум
Сообщений всего: 35
Дата рег-ции: Май 2010  


Помог: 0 раз(а)

[+]


SunChase пишет:
sergtka4ov пишет:
fulltext — сам документ, текущая, последняя версия


ну а если fulltext - это 100 страниц А4, набитые текстом? Не "загнётся" ли система, выгружая из базы это всё одним куском?


От 100 страниц набитых тектом система не загнётся.
Тип LONGTEXT — Максимальная длина 4 294 967 295 символов.

Цитата:
Не "загнётся" ли система, выгружая из базы это всё одним куском?
— а Вы что собираетесь размещать веб-портал для учащихся на виртуальном хостинге?
 
 Top
SunChase
Отправлено: 02 Октября, 2011 - 19:07:47
Post Id



Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Июль 2010  


Помог: 0 раз(а)




sergtka4ov пишет:
— а Вы что собираетесь размещать веб-портал для учащихся на виртуальном хостинге?


Ну где именно оно будет размещаться я не в курсе. Может хостинг может сервер. Моя же задача заключается в оптимальном сопоставлении функционала и ресурсопотребления.

sergtka4ov пишет:
От 100 страниц набитых тектом система не загнётся.


А если представить ситуацию, где в один минимальный промежуток времени(в данном случае можно назвать ситуацию "Последняя неделя перед сдачей курсовых работ") выполняется операция по созданию 50-ти 100-страничных документов. Я лично не сис. админ, но всёже есть подозрения что это будет очень даже ощутимо.

Champion пишет:
Тогда будет более фиксированное количество страниц и только время от времени будет необходимо разбивать разросшиеся страницы или сильно уменьшмвшиеся. Т.е. проводить сборку мусора что ли.

Если я правильно понял вашу идею, то в момент редактирования одной из "страниц" система делает подсчёт её длины, и, в случае "переступания" определённого порога, будет произведена операция по слиянию\разбиению. При этом будет будут перенумеровываться все последующие страницы. Я правильно понял мысль?

Всерьёз задумываюсь над вариантом использования цельного куска текста с "забрасыванием" предыдущей версии документа отдельным файлом. Только все версии документа хранить в txt файлах, а в самой БД только название файла, необходимого для прогрузки.

Интересует пару моментов касательно нагрузки на сервер:

1) Является ли "трудоёмким" для сервера процесс "извлечения" текста из тхт файла?(а также Создание этого файла). Является ли он более длительным, нежели получение того же текста из БД?
2) Рассматривая вариант "разбивки" текста на страницы, задался вопросом касательно его нагрузки на сервер, особенно при регулярном обращении. Если использовать PHP функцию для разбивки текста и формировании паджинации для навигации в сочетании с AJAX запросами, будет ли этот процесс трудоёмким для обработки?(при варианте Загрузки текста из БД и при варианте Загрузки из текстового файла)

(Отредактировано автором: 02 Октября, 2011 - 19:36:00)

 
 Top
Champion Супермодератор
Отправлено: 02 Октября, 2011 - 20:10:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




SunChase пишет:
При этом будет будут перенумеровываться все последующие страницы. Я правильно понял мысль?
Что-то типа того.
SunChase пишет:
хранить в txt файлах, а в самой БД только название файла, необходимого для прогрузки.
Ну это совсем просто. Не достойно дипломной работы)
А открывать страницу из середины файла - последовательным чтением?

SunChase пишет:
процесс "извлечения" текста из тхт файла?
Извлечения порции из места, расположенного далеко от начала - да.
SunChase пишет:
того же текста из БД?
Если в БД разбито по страницам, то БД конечно быстрее. Если разбивать по страницам все-таки не планируете, то файлы предпочтительнее.
SunChase пишет:
формировании паджинации
Если документ хранится целым куском, то скорее всего надо будет посчтать его размер. По-моему, тут предпочтительнее работа с файлом. Если текст разделен на страницы, то посчитать количество страниц проще и быстрее из БД.
 
 Top
SunChase
Отправлено: 02 Октября, 2011 - 20:39:00
Post Id



Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Июль 2010  


Помог: 0 раз(а)




Champion пишет:
SunChase пишет:
При этом будет будут перенумеровываться все последующие страницы. Я правильно понял мысль?
Что-то типа того.


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

Champion пишет:
А открывать страницу из середины файла - последовательным чтением?


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

Champion пишет:
Ну это совсем просто. Не достойно дипломной работы)


Я один на всю группу, кто решился выбрать на тему диплома программирование(а не экономику). Такчто сам факт этого уже является плюсом в любую разработку, доведённую до ума Закатив глазки

В целом, хотелось бы ограничится использованием БД, но незнаю, получится ли сделать систему снисходительной к ресурсам сервера...
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Операционная система и системные вызовы »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB