Parece que tomó una decisión técnica de almacenamiento de datos a corto plazo esencialmente válida para su aplicación: eligió escribir una herramienta de administración de almacenamiento de datos personalizada.
Estás sentado en un continuo, con opciones para moverte en cualquier dirección.
A largo plazo, es probable que (casi, pero no al 100%) se encuentre con problemas, y es mejor que cambie a usar las soluciones de almacenamiento de datos existentes. Hay problemas de rendimiento específicos, muy comunes y predecibles con los que se verá obligado a lidiar, y es mejor que use las herramientas existentes en lugar de utilizar las suyas propias.
Parece que ha escrito una base de datos (pequeña) personalizada, integrada y utilizada directamente por su aplicación. Supongo que confía en un sistema operativo y un sistema de archivos para administrar la escritura y lectura del disco real, y trata la combinación como un almacén de datos.
Cuando hacer lo que hiciste
Estás sentado en un punto ideal para el almacenamiento de datos. Un sistema operativo y un almacén de datos del sistema de archivos es increíblemente conveniente, accesible y portátil multiplataforma. La combinación ha existido durante tanto tiempo, que seguramente tendrá soporte y ejecutará su aplicación en casi cualquier configuración de implementación estándar.
También es una combinación fácil para escribir código: la API es bastante sencilla y básica, y se necesitan relativamente pocas líneas de código para que funcione.
En general, es ideal hacer lo que has hecho cuando:
- Creación de prototipos de nuevas ideas
- Creación de aplicaciones que es muy poco probable que necesiten escalarse, en términos de rendimiento
- Restringido por circunstancias inusuales, como la falta de recursos para instalar una base de datos
Alternativas
Estás en un continuo de opciones, y hay dos 'direcciones' a las que puedes ir desde aquí, lo que considero como 'abajo' y 'arriba':
Abajo
Esta es la opción menos probable para aplicar, pero está aquí para completar:
Puede, si lo desea, bajar , es decir, omitir el sistema operativo y el sistema de archivos por completo y realmente escribir y leer directamente desde el disco. Esta opción generalmente es relevante solo en casos en los que se requiere una eficiencia extrema; piense, por ejemplo, en un dispositivo reproductor de MP3 mínimo / pequeño , sin suficiente RAM para un sistema operativo completamente funcional, o en algo como la máquina Wayback , que requiere una masa increíblemente eficiente operaciones de escritura de datos (la mayoría de los almacenes de datos intercambian escrituras más lentas por lecturas más rápidas, ya que ese es el caso de uso abrumadoramente más común para casi todas las aplicaciones).
Arriba
Aquí hay varias subcategorías; sin embargo, estas no son exactamente exclusivas. Algunas herramientas abarcan ambos, proporcionando cierta funcionalidad en cada una, algunas pueden cambiar completamente de trabajar en un modo a trabajar en el otro, y algunas se pueden superponer unas sobre otras, proporcionando diferentes funciones a diferentes partes de su aplicación.
Almacenes de datos más potentes
Es posible que necesite almacenar volúmenes de datos cada vez más altos, mientras sigue confiando en su propia aplicación para gestionar la complejidad de la manipulación de datos. Tiene a su disposición una amplia gama de tiendas de valores clave, con diferentes grados de soporte para funciones relacionadas. Las herramientas NoSQL entran en esta categoría, así como en otras.
Este es el camino obvio para escalar cuando lo siguiente describe su aplicación:
- Es inusualmente pesado lectura dependiente
- Usted está de acuerdo con intercambiar un mayor rendimiento por garantías de consistencia más bajas (a corto plazo) (muchas ofrecen "consistencia eventual").
- Está administrando "directamente" la mayor parte de la manipulación de datos y la falta de coherencia (en la práctica, probablemente terminará utilizando una herramienta de terceros al principio, aunque eventualmente lo incorporará a su aplicación o en una capa intermedia escrita personalizada) .
- Está buscando escalar masivamente la cantidad de datos que está almacenando y / o su capacidad de buscar a través de ellos, con requisitos de manipulación de datos "relativamente simples".
Aquí hay algo de margen de maniobra: puede forzar una mejor consistencia de lectura, para lecturas más lentas. Varias herramientas y opciones proporcionan API de manipulación de datos, indexación y otras opciones, que pueden ser más o menos adecuadas para escribir fácilmente su aplicación específica. Entonces, si los puntos anteriores describen casi por completo su aplicación, podría estar "lo suficientemente cerca" para trabajar con una solución de almacenamiento de datos más potente.
Ejemplos conocidos: CouchDB , MongoDB , Redis , soluciones de almacenamiento en la nube como Azure de Microsoft , Google App Data Store y ECE de Amazon.
Motores de manipulación de datos más complejos.
La familia de aplicaciones de almacenamiento de datos "SQL", así como una variedad de otras, se describen mejor como herramientas de manipulación de datos que los motores de almacenamiento puro. Proporcionan una amplia gama de funcionalidades adicionales, más allá del almacenamiento de datos y, a menudo, más allá de lo que está disponible en el lado de la tienda de valores clave. Querrás tomar este camino cuando:
- Absolutamente tiene que tener consistencia de lectura, incluso si eso significa que tendrá un éxito en el rendimiento.
- Está buscando realizar de manera eficiente una manipulación de datos altamente compleja: piense en operaciones muy complejas de UNIRSE y ACTUALIZAR, cubos de datos y segmentación, etc.
- Usted está de acuerdo con cambiar la rigidez por el rendimiento (piense en formatos de almacenamiento de datos fijos y forzados, como las tablas, que no pueden modificarse fácil y / o eficientemente).
- Tiene los recursos para lidiar con un conjunto de herramientas e interfaces a menudo más complejo.
Esta es la forma más "tradicional" de pensar en una base de datos o un almacén de datos, y ha existido durante mucho más tiempo, por lo que hay muchas cosas disponibles aquí y, a menudo, hay mucha complejidad con la que lidiar. Es posible, aunque requiere un poco de experiencia y conocimiento, y construir soluciones simples / evitar gran parte de la complejidad; sin embargo, lo más probable es que termines usando herramientas y bibliotecas de terceros para administrar la mayor parte por ti.
Ejemplos bien conocidos son MySQL , SQL Server , Oracle's Database y DB2 .
Subcontratar el trabajo
Existen varias herramientas y bibliotecas modernas y de terceros, que se interponen entre sus herramientas de almacenamiento de datos y su aplicación, para ayudarlo a administrar la complejidad.
Intentan eliminar inicialmente la mayor parte o todo el trabajo que se dedica a administrar y manipular los almacenes de datos e, idealmente, le permiten realizar una transición suave hacia la complejidad solo cuando sea necesario. Esta es un área activa de emprendimiento e investigación, con algunos resultados recientes que son inmediatamente accesibles y utilizables.
Ejemplos bien conocidos son las herramientas MVC ( Django , Yii ), Ruby on Rails y Datomic . Aquí es difícil ser justo, ya que hay literalmente docenas de herramientas y bibliotecas que actúan como envoltorios alrededor de las API de varios almacenes de datos.
PD: si prefiere videos a texto, es posible que desee ver algunos de los videos relacionados con la base de datos de Rich Hickey; él hace un buen trabajo al dilucidar la mayor parte del pensamiento que implica la elección, el diseño y el uso de un almacén de datos.