|
3 / 3 / 1
Регистрация: 24.06.2012
Сообщений: 51
|
|
Организовать систему лайков и репостов к сообщениям пользователей как в vk21.04.2014, 20:13. Показов 2835. Ответов 11
Метки нет (Все метки)
Доброе время суток.
Мне нужно организовать систему лайков и репостов к сообщениям пользователей как в vk. Сайт написан на C++, часто запрашиваемые данные хранятся в оперативной памяти. Никаких баз данных не использую. Есть только файлы. ID сообщения занимает 8 байт памяти. ID пользователя - 4 байта. Нужно максимально быстро с минимальными затратами памяти, процессорного времени и минимальным износом SSD реализовать 3 функции: 1 - добавить лайк 2 - удалить лайк 3 - проверить ставил ли я лайк Как лучше реализовать с расчётом на то, что лайков как у сообщения, так и у пользователя может быть очень много? Может есть какие ссылки? Особенно интересно как это реализовал Дуров в vk.
0
|
|
| 21.04.2014, 20:13 | |
|
Ответы с готовыми решениями:
11
Как организовать систему лайков Как у себя на сайте вывести количество лайков и репостов с Facebook? Подсчет лайков и репостов за определенный период |
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||
| 21.04.2014, 21:17 | ||
|
Браузер написан на Си, но язык разметки(интерпритация) это html и php (вроде бы)...
0
|
||
|
3 / 3 / 1
Регистрация: 24.06.2012
Сообщений: 51
|
|
| 22.04.2014, 04:57 [ТС] | |
|
Это значит, что http демон и websocket сервер написаны на C++. HTML разметка для выдачи браузеру собирается сишным кодом. По сравнению с PHP удалось увеличить скорость обработки запросов в сотни раз.
0
|
|
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
||
| 22.04.2014, 16:20 | ||
|
0
|
||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
| 22.04.2014, 17:17 | |
|
Krocker, у вас не стандартный подход, мало кто таким способом делает, подсказать трудно, т.к. действительно не понятно как всё это устроено. (как для меня, так это вообще очень интересно, как это с помощью Си писать веб страницы, ну или я чего то не догнал)
Ну допустим, что мы "опустим" саму страницу, а предположим что это WINAPI окно, в котором например нужно сделать подобное. Тогда нужно знать когда будет запрашиваться система лайков. Грубо я представляю это так как выглядит на сайтах: вы видите сообщение, при его выводе сразу выводится в низу окошко с лайками(только количество проголосовавших - т.е. базовая инфа). Если нужно узнать подробнее - то клик по окошку и выводится(как в "моём мире") доп окно, в которых список проголосовавших. Т.е. исходя из этого, имеем файл с лайками. По ID сообщения находим строку в файле лайков, где первой переменной будет общее число лайков(типа int), и далее в строке(а лучше сделать подстроку, чтоб когда строку в файле читаеш - не читать лишнее) будут ID пользователей, поставивших лайк. Думаю для быстроты работы и поиска в файле ID, нужен алгоритм поиска.. Ну тут уж нужно включить фантазию, например иметь несколько файлов с ID, упорядоченными, при этом например в первой строке каждого файла писать ID и его число соответствующее байту в файле(чтоб сразу перейти с помощью fseek к примеру) Вот по трём пунктам конешно можно поэкперементировать... Я бы на вашем месте взял бы чистую тетрадку и начал бы примерно планировать как сделать соотношение "цена-качество". Функции для манипуляций с лайками делайте(или одну функцию с переменной enum типа для опр. действия) ну и в ней уж пишите алгоритм. Хотя честно скажу, я ещё "лошара", опыта не так много чтоб давать советы по оптимизации, по мне так простота понимания кода - самое главное, а остальное по мере поступления задач.
0
|
|
|
3 / 3 / 1
Регистрация: 24.06.2012
Сообщений: 51
|
||||
| 22.04.2014, 18:24 [ТС] | ||||
|
Если нужно читать информацию с диска, то обработка запароса занимает от 00:00:00.0001 (одна десятитысячная секунды), до 00:00:00.002 Если данные уже в оперативной памяти, то отсчёт идёт от 00:00:00.000007 Это только одним ядром процессора. Если к каждому сообщению делать отдельный фаил с лайками, то файл с одним лайком(4 байта бинарной информации) на диске займёт несколько килобайт, что очень не эффективно. Пока придумал огород из 3х типов общих файлов. В каждом из них резервируется определённое место, куда будут записаны ID пользователей. После переполнения это место освобождается под лайки другого сообщения, а текущие лайки переносятся в фаил попросторнее. Если переполнятся в последнем файле, то будет создан отдельный фаил с лайками для определённого сообщения. При лайке массив данных загружается в std::set<unsigned int> , в ней удобно искать добавлять и удалять данные, и какое-то время хранится в оперативной памяти как горячие данные, если в течении этого промежутка никто не запрашивал данные, то они сбрасываются на диск. Если были ещё лайки то время хранения данных продливается. Потом всё за 1 раз сбрасывается на диск.
0
|
||||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||
| 22.04.2014, 18:59 | |||
|
0
|
|||
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
||
| 23.04.2014, 09:01 | ||
|
Krocker, нельзя сказать, что я знаток данной технологии, но мне прям видятся сразу две огромные стандартные проблемы хранения данных в оперативной памяти:
- что будет с ними, когда память закончится? В виртуальную область перемещаться? А чем тогда файл/бд не нравятся? - что будет с ними при аварийном падении сервера?
0
|
||
|
3 / 3 / 1
Регистрация: 24.06.2012
Сообщений: 51
|
|||
| 23.04.2014, 09:37 [ТС] | |||
|
Некоторые FastCGI на C++ успешно работают. Собственный демон в написани не сложнее и при этом избавляемся от лишних перебросов данных из одного процесса в другой, изучения документации к серверу, снижаем возможность взлома за счёт существенного снижения объема кода сервера (т.е. потенциальных ошибок), абсолютно ненужных функций и использованием незнакомого посторонним людям кода.
0
|
|||
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
|||
| 23.04.2014, 09:46 | |||
|
Конечно, придется сперва вникнуть в принципы ее работы, но столько же времени уйдет и на написание своего обработчика всего этого дела. Если вы уверены, что ваши подходы и методы лучше, чем то, что уже было разработано и отлажено, да и успешно применяется уже длительное время, тогда да, тогда используйте свои.
0
|
|||
|
3 / 3 / 1
Регистрация: 24.06.2012
Сообщений: 51
|
|||
| 23.04.2014, 11:04 [ТС] | |||
|
О том, что использую простые файлы писал ещё в первом посте. В случае с файлами баз данных, таких, как в MySQL, расписывать всё по порядку нет времени. Я уже экспериментировал в предыдущей версии сервера с MySQL и понял, что гораздо быстрее сбросить кусок оперативной памяти в фаил и считать обратно, чем готовить SQL запросы, ждать ответа от базы данных и конвертировать ответ обратно в структуру. Ещё отсутствует возможность взлома через SQL инъекцию.
0
|
|||
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
||
| 23.04.2014, 11:07 | ||
|
В общем, если считаете правильным - делайте. Это вещь полезная.
0
|
||
| 23.04.2014, 11:07 | |
|
Помогаю со студенческими работами здесь
12
Получить первые записи со стены, количество лайков и репостов Как создать систему лайков на PHP/Ajax Как создать систему лайков и дислайков ios Как сделать простую систему лайков и дизлайков Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|