2008-10-28 3 views
0

Мне нужно выбрать систему управления базами данных (СУБД), которая использует наименьшее количество основной памяти, так как мы сильно ограничены. Поскольку СУБД будет использовать все больше и больше памяти для хранения индекса в основной памяти, как именно я могу определить, какая СУБД имеет наименьший объем памяти?Как определить, какая основная память использует приложение

Прямо сейчас у меня только программа мониторинга памяти открыта, когда я выполняю ряд запросов, которые мы будем называть X. Затем я запускаю тот же набор запросов X в другой СУБД и вижу, сколько памяти используется в его жизни и сравнить с другими следами памяти.

Неужели это не тупой способ обойти это? Есть ли способ лучше?

Спасибо, JBU

+0

Почему вы ограничены? Память дешевая! Или это для мобильного/встроенного устройства? – 2008-10-28 01:43:03

ответ

0

В конечном счете, этот вид оптимизации, вероятно, ответить на неправильный вопрос.

Скорее всего, ответы, которые вы собираете посредством такого рода испытаний, будут вводить в заблуждение, потому что СУБД будет реагировать по-разному под «живыми» обстоятельствами, чем во время тестирования. Кроме того, вы запираетесь на определенную архитектуру. Трудно сменить СУБД по дороге, как только у вас есть код, написанный против него. Вам будет гораздо лучше узнать, какая СУБД будет заполнять ваши потребности и упростить процесс разработки, а затем убедитесь, что вы оптимизируете свои SQL-запросы и индексы в соответствии с потребностями вашего приложения.

+0

К счастью, я использую JDBC, который является стандартным API для Java-приложений с использованием баз данных. – 2008-10-28 00:45:51

1

Что вы можете сделать в приложении, так это то, как вы извлекаете данные. Если вы выберете все строки из заданного запроса, он может попытаться создать Collection в вашем приложении, которое может очень быстро потреблять память, если вы не будете осторожны. Вероятно, это, скорее всего, причина истощения памяти.

Чтобы решить эту проблему, откройте курсор к запросу и выберете строки один за другим, отбросив объекты строки при повторении по набору результатов. Таким образом, вы сохраняете только одну строку за раз, и вы можете более легко предсказать «знак высокой воды».

В зависимости от драйвера JDBC (т. Е. Марки базы данных, к которой вы подключаетесь) может оказаться сложным убедить JDBC-драйвер не, чтобы сделать fetchall. Например, некоторые драйверы извлекают весь набор результатов, чтобы вы могли прокручивать его назад, а также вперед. Несмотря на то, что JDBC является стандартным интерфейсом, настройка его для выполнения строки по времени вместо fetchall может включать в себя собственные параметры.

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

2

Просто используйте SQLite. В одном процессе. С C++, желательно.