Один большой файл или много мелких

211
13 февраля 2018, 08:16

Нужно записывать последние сообщения пользователей, если до этого было уже записано от него сообщение - перезаписать.

Мои варианты:

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

Какая реализация более рациональна? А может есть идея получше?
Условное количество пользователей - 10.000, количество сообщений в минуту > 100

Answer 1

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

struct {
    char user[N];
    char msg[M];
}

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

Текстовый формат для такого - проще застрелиться - все время переписывать файл до конца...

Но все же подумайте - может, лучше держать в памяти, и сбрасывать в файл только время от времени? А то у вас будет сплошное пиление диска...

READ ALSO
Ошибка в функции с переменным числом параметров

Ошибка в функции с переменным числом параметров

Пытаюсь написать создание по формату std::string с помощью vsnprintf, но что-то где-то пошло не так и программа падает во время вызова vsnprintf

210
Ошибка считывания с файла

Ошибка считывания с файла

Есть метод, который конвертирует OBJ файл (3д модель)indices содержит массив строк информации многоугольника, например 1//3, после операции split("/")...

353
Предупреждение: work_time.xml has more than 80 views, bad for performance

Предупреждение: work_time.xml has more than 80 views, bad for performance

В одном layout у меня много компонентов, вот скрин:

222
Добавить обработчик двойных нажатий

Добавить обработчик двойных нажатий

OnSwipeTouchListenerjava В данный код необходимо добавить двойное нажатие

237