Вы создаёте слайс, длиной 100к элементов, структура каждого весит 24 байта, плюс содержимое строки, при одновременных 1000 запросов какой размер вы ожидаете? Просто возьмите калькулятор и посчитайте. У меня получилось 2.25 Gb без учёта строк в структуре. Такой размер и должен быть. Хватит паниковать)))
Сегодня вы хотите слайс с динамическим числом полей из базы. Завтра вы захотите добавить в ответ одну чиселку, всего одну и вам покажется, что можно передавать строкой из базы, а после в нужном месте конвертнуть в число через strconv. Послезавтра чиселок станет больше, а так же добавятся булеан типы и, боже упаси, децималы с NULL-able и вы решите что пора переходить на сторону зла с массивом интерфейсов и рефлексией. Испытывая ежедневное страдание и боль от работы с вашей чудо-функцией вы когда-нибудь придёте к мысли, что ваша идея написать универсальное решение для запросов в базу с треском провалилась и вы начнёте использовать как все нормальные люди под каждый запрос свою структуру, если конечно кто-нибудь не переманит вас на совсем скользкий путь орээмов
AppID это сущность телефонного аппарата, её можно заменить заменив аппарат. Но вам по-любому надо решать вопрос изначальной блокировки. Перечитать правила. Подать запрос на создание нового аккаунта
О том, что джава не способна сокращать массивы без пересоздания я не знал и поэтому исправился, не откусывать, а инкрементить счётчик и брать значение из массива по счётчику, так 100% с памятью будет норм
Сгенерить рандомный индекс, достать элемент, проверить на не равность с -1 взять следующий элемент и так 45 раз, плюс еще дополнительная проверка на выход за пределы массива, а после установка найденного значения в -1. Вот такая сложность будет у вашего решения для того, чтобы достать последний элемент. Не слишком ли много операций для элементарной задачи?
jenya7771, так извращаться не стоит. У redis есть более подходящие структуры хранения данных, например Sets. Данные каждого запроса вы вставляете методом lpush в ключ, название которого состоит из текущего времени, но только без секунд, то есть что-то типа 2018-11-28T08-50. При перкладывании данных в кликхаус вы ищете все ключи, за исключением ключа текущей минуты, достаёте данные из ключа, вставляете в кликхаус и после удаляете ключ из редиса
jenya7771, 100 миллионов тоже не нагрузка, особенно если она равномерно размазана по суткам.
Я бы написал небольшой скриптец на Lua, который подключается к Nginx и который тупо кладёт данные в Redis. И ещё один скриптец( go или nodejs) который раз в N секунд перекладывает данные из Redis в Clickhouse