2010-07-22 22 views
5

Estoy escribiendo una cosa de estilo de base de datos en C (es decir, almacenará y operará en aproximadamente 500,000 registros). Voy a ejecutarlo en un entorno con limitaciones de memoria (VPS), por lo que no quiero que el uso de la memoria se agote. No voy a manejar grandes cantidades de datos, tal vez hasta 200MB en total, pero quiero que la huella de memoria permanezca en la región de 30 MB (sacando estos números del aire).¿Debo gestionar páginas o simplemente apoyarme en la memoria virtual?

Mi instinto es hacer mi propio manejo de página (las bases de datos reales lo hacen), pero he recibido consejos que dicen que debería asignarlo todo y permitir que el sistema operativo haga la paginación de VM para mí. Mis números nunca subirán por encima de este orden de magnitud. ¿Cuál es la mejor opción en este caso?

Asumiendo la segunda opción, ¿en qué punto sería sensato que un programa haga su propia búsqueda? Obviamente RDBMsses que pueden manejar gigabytes debe hacer esto, pero debe haber un punto a lo largo de la escala en el que vale la pena preguntar.

Gracias!

Respuesta

9

Usa malloc hasta que esté en ejecución. Entonces y solo entonces, inicie el perfilado. Si se encuentra con los mismos problemas de rendimiento que las "bases de datos reales" patentadas y convencionales, naturalmente comenzará a realizar optimizaciones de caché/página/alineación. Estas cosas se pueden ubicar fácilmente después de tener una base de datos en funcionamiento, y son ortogonales para tener una base de datos en funcionamiento.

+1

única respuesta razonable. "La optimización prematura es la raíz de todo mal". –

+0

A todo el mundo le gusta esa línea. Aquí tiendo a estar de acuerdo con @Matt Joiner, pero hay un momento para comenzar con su propia búsqueda. Si él sabe que iba a trabajar con grandes conjuntos de datos, entonces realmente podría tener sentido comenzar con la búsqueda en lugar de perder el tiempo en una solución ingenua. – BobbyShaftoe

+0

Nahhh, no hay garantía de que su primera "implementación" sea incluso más rápida que la "predeterminada". Es mejor que comience desde abajo, que puede ser la parte superior, o la mayor parte de lo que ya sabe, hasta que comience a perfilar y ajustar desde una solución funcional. Sin embargo, tenga en cuenta que no hay absolutamente ninguna buena razón para no poder diseñarlo cuidadosamente, teniendo en cuenta el rendimiento y las optimizaciones algorítmicas desde el primer momento. Pero no dejaría que incurra en un costo de tiempo de desarrollo hasta que una solución de trabajo pueda proporcionar un control para las comparaciones. –

3

Los sistemas de gestión de bases de datos que realizan su propia búsqueda también se benefician de la inversión de enormes esfuerzos de investigación para asegurarse de que sus algoritmos de búsqueda funcionan bien en condiciones variables de carga y sistema. A menos que tenga a su disposición un conjunto similar de recursos, recomendaría no adoptar ese enfoque.

El sistema de paginación OS que tiene a su disposición ya se ha beneficiado de los esfuerzos de ajuste de muchas personas.

Sin embargo, hay algunas cosas que puede hacer para ajustar su sistema operativo para beneficiar el acceso al tipo de base de datos (grandes operaciones de E/S secuencial) frente al ajuste de escritorio típico (mezcla de E/S secuencial y aleatoria).

En resumen, si usted es un equipo de un solo hombre o un pequeño equipo, probablemente debería hacer uso de las herramientas existentes en lugar de tratar de hacer las suyas propias en esa área en particular.

+0

Bueno, en este momento no es necesario tener un equipo completo de investigadores a su disposición para escribir un sistema de paginación básico. Claro, se han escrito muchos artículos, pero eso es cierto sobre cualquier cosa en CS. En realidad, no es tan malo tener algo básico en marcha, es solo un poco más de trabajo si realmente no lo necesita en primer lugar. – BobbyShaftoe

+0

Los sistemas de bases de datos que realizan su propia búsqueda son solo una manifestación del síndrome NIH, y/o un deseo de tener un buen rendimiento incluso en sistemas operativos rotos.La solución correcta es usar siempre el sistema operativo para lo que estaba destinado, y si funciona mal, arreglarlo. Usted tiene la fuente para su sistema operativo, ¿verdad? :-) –

Cuestiones relacionadas