Настройка производительности на получение данных и запрос - PullRequest
0 голосов
/ 12 октября 2019

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

public class Message {
    //the key
    private long t;

    //the body
    private byte[] body;
}

В этом интерфейсеметод put с параметром Message используется для хранения данных, а getMessage с ключом tmin и ключом tmax используется для запроса данных, код которого приведен ниже:

public interface MessageStore {

    void put(Message message);

    List<Message> getMessage(long tMin, long tMax);
 }

Сначала этоПростая вещь для обработки данных и запросов, мы можем использовать Redis как стороннее хранилище БД, но дело в том, что мы не можем использовать сторонние хранилища БД в любом случае, например, Redis, MySQL, SQLite и т. д.

Кроме того, объем сообщения составляет около 50 байтов, а общее количество сообщений составляет около 200 миллионов, а объем составляет около 10 ГБ. Гораздо хуже, пространство кучи JVM составляет всего около 8 ГБ. Поэтому мы не можем загрузить все эти данные сообщения в память докера.

Поскольку производитель будет вызывать метод put и метод getMessage в нескольких потоках, поэтому в рамках указанных выше ограничений нам необходимо поместить этибыстро сообщения и запросить их быстро в поточно-безопасном режиме.

Для метода put я думаю, что мы можем использовать MapedByteBuffer для быстрого сохранения данных сообщения в файл, потому что ключ данных сообщения приходит не по порядку, поэтому хранилище данных в файле будет смешанным,Эти смешанные данные недостаточно хороши для выполнения запросов.

Поскольку память Jvm недостаточно велика, поэтому я не могу использовать TreeMap для хранения этих данных, в противном случае использование TreeMap будет хорошим выбором. .

Есть идеи, как хранить данные в порядке и порядке для запросов?

Кажется, мне нужно записать локальную базу данных и продолжить .....

...