Я могу найти дешевые хосты VPS с 128 МБ ОЗУ, и мне интересно, достаточно ли этого для запуска узла ящика для крошечной базы данных, первоначально для тестирования. (Я не ищу рекомендуется памяти, но минимум один, чтобы не нарваться на вышедших из памяти исключений. Клеть должна быть единственной службой в узле.)Crate - Какова минимальная потребность в памяти для узла узла?
ответ
Возможно использование Crate в такой среде. Я бы не рекомендовал его. В любом случае вам необходимо принять несколько мер предосторожности:
- Выберите скудный дистрибутив Linux, который фактически загружается и запускается с таким небольшим объемом памяти. Альпийский может быть одним выбором.
- Установите Java. Вам нужно хотя бы openjdk7 (обновление 55 и выше).
- Установите и запустите ящик из tarball, как описано на веб-сайте Crate.
На виртуальной машине с 128 Мб оперативной памяти на вершине альпийской 3.3, я установил openjdk8-jre
(вы должны включить сообщества репозиториев в /etc/apk/repositories
) на диске. Я загрузил tar-файл Crate 0.54.7 и просто извлек его. Я установил CRATE_HEAP_SIZE=64m
, так как это рекомендуемая половина доступной памяти.
Я создал таблицу «демо»
DROP TABLE IF EXISTS demo;
CREATE TABLE demo (
data string
);
и наполнил его до 10000 записей 10 KB случайных строк каждая с медленным Баш скрипт:
head -c7380 /dev/urandom | uuencode - | grep ^M | tr -d '\n\047'
Это заняло несколько минут (около 20 записей/с), но с объемными вставками он должен быть способ быстрее и просто взять секунды.
Чистый объем данных был около 100 МБ и занимал 287 МБ брутто на диске, как сообщается административным интерфейсом администратора.
Операционная система, установленное программное обеспечение и данные в целом заявили 820 МБ на диске.
Я настроил два раза больше памяти, как пространство для свопинга и получил следующий след (процесс Crate сам без данных занимает около 40 МБ):
# free
total used free shared buffers cached
Mem: 120472 117572 2900 0 652 6676
-/+ buffers/cache: 110244 10228
Swap: 240636 131496 109140
полнотекстовый поиск по всем 10000 записей (SELECT count(*) FROM demo WHERE data LIKE '%ABC%'
) принял около 1,9 секунды.
Резюме: Да, это возможно, но вы теряете много возможностей, если на самом деле это так. Ваши результаты будут в значительной степени зависеть от типа запросов, которые вы на самом деле выполняете.
Я просто играл примерно немного, насколько вы могли бы уменьшить размер HEAP, и это выглядит так: 64MB
куча (памяти) может работать в вашем случае использования.
Убедитесь, что вы установите размер НЕАР правильно используя переменную CRATE_HEAP_SIZE
(docs) среды, а также установить bootstrap.mlockall: true
(docs) к JVM не поменять память.
Однако я бы порекомендовал не менее 256MB
HEAP (512MB
).
Какие запросы вы ожидаете от запуска - и сколько записей вы ожидаете? очевидно, чем меньше памяти, тем меньше данных может обрабатывать ваш ответ. – Christian
~ 10000 записей ~ 10Kb каждый; на пике он должен обрабатывать 10 записей в минуту и 100 раз в минуту. Простые запросы (без объединения) по значениям столбцов, элементам массива и одному столбцу полного текста. –
Каждое чтение должно содержать не более 100 записей по 10 Кб каждый (общий максимум 1 МБ/чтение). Каждая запись сохраняет только одну запись. –