Top.Mail.Ru
Ответы

Возможно ли каждый раз не перезаписывать данные в JSON, а просто добавлять новые?

Пишу игрового бота для тг и столкнулся с проблемой, постоянное перезаписывание файла JSON очень медленное, даже без самого бота(при тестах обнаружил). Ранее использовал sqlite3, с такой проблемой не сталкивался, но теперь структура данных довольно сложна для sqlite3, решил делать базу данных на JSON, но очень медленно идёт запись новых данных даже для одного пользователя, регистрация занимает примерно секунду - полторы, а если ещё взять задержку серверов телеграмма, задержка станет уж слишком велика, а если их будет много и каждый раз придётся перезаписывать огромный объём информации я вообще молчу. Вот пример данных, которые должны хранить информацию об одном пользователе:

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
 { 
   "123": { 
      "player": { 
         "id": 123, 
         "username": "Vasua", 
         "nickname": "Vasua", 
         "link": "@Vasua", 
         "role": "Игрок", 
         "balance": 15000, 
         "donate": 0, 
         "bitcoins": 0, 
         "level": 1, 
         "exp": 0, 
         "clan_id": null, 
         "marry": null, 
         "job": { 
            "name": "Безработный", 
            "salary": 0 
         } 
      }, 
      "admin": { 
         "prefix": "🎧  Агент поддержки 🎧", 
         "level": 0, 
         "warns": 0, 
         "count_reports": 0 
      }, 
      "property": { 
         "car": { 
            "1": null, 
            "2": null, 
            "3": null 
         }, 
         "biz": { 
            "factor": 1, 
            "1": null, 
            "2": null, 
            "3": null 
         }, 
         "ferm": { 
            "level": 0, 
            "factor": 1 
         } 
      }, 
      "stats": { 
         "ban": { 
            "isBanned": false, 
            "time_ban": 0, 
            "isRBanned": false, 
            "time_rban": 0 
         }, 
         "count_messages": 0 
      }, 
      "others": { 
         "pay_limit": 0, 
         "bank": { 
            "credit": 0, 
            "limit": 500000 
         }, 
         "bonus": { 
            "size": 15000, 
            "last_issue": 0 
         } 
      } 
   } 
} 

Что делать хз. Или стоит перенести всё это в sqlite, а если переносить, то как эффективно это сделать, чтобы не создавать тысячи таблиц.

По дате
По Рейтингу
Аватар пользователя
Новичок

Ты что, хранишь всю базу целиком в одном охрененно большом json файле? Ну ты мог бы продолжать использовать sqlite, только таблица будет выглядеть так:

1234
 Create table ... (
player_id INTEGER PRIMARY KEY,
player_data TEXT
) 

Вот в player_data храни json в виде большой строки для каждого пользователя, тогда тебе не придется на каждый чих заново базу перезаписывать целиком

Аватар пользователя
Высший разум

Используй Redis или Memcached как прослойку перед файлами. Вот самое то по типу данных

Аватар пользователя
Ученик

Хз