2010-05-26 12 views
9

He estado buscando una implementación de la biblioteca SQL C++ que sea fácil de enganchar como SQLite, pero más rápida y más pequeña. Mis proyectos están en desarrollo de juegos y definitivamente hay un punto de corte entre pasar la prueba de ACID y querer un rendimiento extremo. Estoy dispuesto a alejarme de las consultas de SQL de estilo de cadena, lo que permite que sea un código controlado, pero no he encontrado nada que ofrezca flexibilidad similar a la de SQL, al mismo tiempo que prefiero el rendimiento a la prueba de ACID.Incluso más liviano que SQLite

No quiero volver a inventar la rueda, y la idea de implementar una biblioteca SQL por mi cuenta es bastante desalentadora, incluso si solo va a ser un subconjunto simple de todas las llamadas que podría hacer.

Necesito los comandos básicos (SELECCIONAR, MODIFICAR, ELIMINAR, INSERTAR, con UNIR, y DONDE), no las operaciones de datos (como ordenar, min, máximo, conteo) y no necesito que la base de datos sea atómica, o incluso imponer la coherencia (puedo usar un servicio SQL real mientras estoy probando y depurando).

Respuesta

14

¿Está seguro de haber obtenido la velocidad máxima disponible de SQLITE? Fuera de la caja, SQLITE es extremadamente seguro, pero bastante lento. Si sabe lo que está haciendo y está dispuesto a arriesgar la corrupción de DB en un bloqueo de disco, existen varias optimizaciones que puede hacer para proporcionar mejoras de velocidad espectaculares.

En particular:

  • desactive la sincronización
  • Grupo escribe en transacciones
  • tablas Índice
  • uso de bases de datos en la memoria

Si no ha explorado todos estos, entonces es probable que corras muchas veces más lento de lo que podrías hacerlo.

+0

+1. Yo iría con eso; Personalmente no puedo encontrar nada (basado en SQL) mejor que SQLite. – INS

+2

No puedo decir lo suficiente sobre el impacto en el rendimiento de las transacciones con INSERT y SQLite. ENORME. – CuppM

+0

después de haber experimentado, sí, me faltaba un truco con lo que puedes hacer con SQLite. Había pasado por alto todas las opciones para hacerlo más rápido en sí mismo. Muchas gracias. –

0

Si solo necesita esas operaciones básicas, realmente no necesita SQL. Eche un vistazo al almacenamiento de datos NoSQL, por ejemplo Tokyo Cabinet.

10

No estoy seguro de que pueda encontrar algo con mejores prestaciones que SQL. Especialmente si quieres operaciones como JOINs ... ¿La velocidad de SQLite es realmente un problema? Para solicitudes simples, generalmente es más rápido que cualquier SGDB completo. ¿No tienes un problema de índice?

Sobre el tamaño, no es el evento 1Meg extra en el archivo binario, así que estoy un poco sorprendido de que sea un problema.

Puede ver Berkeley DB, que probablemente sea la base de datos más rápida disponible, pero en su mayoría solo es una base de datos clave>.

Si realmente necesita mayor velocidad, considere cargar toda la base de datos en la memoria (utilizando SQLite nuevamente).

+0

+1; Berkeley DB sería mi primera opción cuando se trata de tales requisitos, pero no está basado en SQL. – INS

+1

+1. Yo diría que Berkeley DB ofrece "SQL como la flexibilidad a la vez que también prefiere el rendimiento". No veo un requisito "basado en SQL". – MSalters

+0

1mb es un problema en los juegos. Incluso hoy en día, se ha perdido aproximadamente el cinco por ciento del presupuesto del código (en la codificación de PS3/360). Pasó a lo que otros codificadores considerarían como código de terceros opcional. –

1

Es posible que desee considerar Embedded innoDB. Ofrece la funcionalidad básica de SQL (obviamente, vea MySQL) pero no ofrece la sintaxis SQL (ya que es parte de MySQL, no de innoDB). En 838 KB, no es demasiado pesado.

Cuestiones relacionadas