0

我需要选择一个使用最少主内存的数据库管理系统 (DBMS),因为我们受到严格限制。由于 DBMS 将使用越来越多的内存来保存主内存中的索引,我如何准确判断哪个 DBMS 具有最小的内存占用?

现在我只打开了一个内存监视器程序,同时执行一系列我们将调用 X 的查询。然后我在不同的 DBMS 上运行同一组查询 X 并查看其生命周期中使用了多少内存并与其他内存占用。

这是一种不愚蠢的方式吗?有没有更好的办法?

谢谢,杰布

4

3 回答 3

2

只需使用 SQLite。在一个单一的过程中。最好使用 C++。

于 2008-10-28T10:33:11.967 回答
1

您可以在应用程序中做的是管理获取数据的方式。如果您从给定查询中获取所有行,它可能会尝试Collection在您的应用程序中构建一个,如果您不小心,它会很快消耗内存。这可能是内存耗尽的最可能原因。

要解决此问题,请打开查询游标并一一获取行,在遍历结果集时丢弃行对象。这样您一次只存储一行,并且可以更轻松地预测“高水位线”。

根据 JDBC 驱动程序(即您要连接的数据库品牌),说服 JDBC 驱动程序不要执行 fetchall 可能会很棘手。例如,一些驱动程序获取整个结果集以允许您向后和向前滚动它。尽管 JDBC 是一个标准接口,但将其配置为一次执行一行而不是 fetchall 可能涉及专有选项。

在数据库服务器端,您应该能够管理它分配给索引缓存等的内存量,但是您可以配置的具体内容在每个品牌的数据库中是不同的。没有捷径可以自学如何调整每台服务器。

于 2008-10-28T01:36:23.093 回答
0

最终,这种优化可能回答了错误的问题。

您通过此类测试收集的答案很可能会产生误导,因为 DBMS 在“实时”环境下的反应与您在测试期间的反应不同。此外,您将自己锁定在特定的架构中。一旦您编写了针对它的代码,就很难在以后更改 DBMS。您最好找到哪个 DBMS 将满足您的需求并简化您的开发过程,然后确保您正在优化您的 SQL 查询和索引以满足您的应用程序的需求。

于 2008-10-28T00:35:51.483 回答