Archivos de texto sin formato en un sistema de archivos
- Muy simple de crear y editar
- Fácil de manipular para los usuarios con herramientas simples (es decir, editores de texto, grep, etc.)
- Almacenamiento eficiente de documentos binarios.
Archivos XML o JSON en disco
- Como arriba, pero con un poco más de capacidad para validar la estructura.
Hoja de cálculo / archivo CSV
- Modelo muy fácil de entender para los usuarios de negocios.
Subversion (o un sistema de control de versiones basado en disco similar)
- Muy buen soporte para versionar datos
Berkeley DB (Básicamente, una tabla hash basada en disco)
- Muy simple conceptualmente (solo clave / valor sin escribir)
- Bastante rapido
- Sin gastos generales de administración
- Admite transacciones que creo
DB simple de Amazon
- Al igual que Berkeley DB, creo, pero alojado
Almacén de datos de Google App Engine
- Hospedado y altamente escalable
- Por documento de almacenamiento de valores clave (es decir, modelo de datos flexible)
CouchDB
- Foco del documento
- Almacenamiento simple de datos semiestructurados / basados en documentos
Colecciones de idiomas nativos (almacenados en memoria o serializados en disco)
- Integración lingüística muy ajustada
Motor de almacenamiento personalizado (escrito a mano)
- Potencialmente muy alto rendimiento en casos de uso requeridos
No puedo afirmar que sepa mucho sobre ellos, pero también te gustaría mirar en los sistemas de bases de datos de objetos .
La respuesta de Matt Sheppard es excelente (mod up), pero tendría en cuenta estos factores al pensar en un huso:
Una ventaja particular de los archivos CSV sobre los RDBMS es que pueden ser fáciles de condensar y moverse prácticamente a cualquier otra máquina. Hacemos grandes transferencias de datos, y todo es lo suficientemente simple, solo usamos un gran archivo CSV y fácil de escribir usando herramientas como rsync. Para reducir la repetición en grandes archivos CSV, puede usar algo como YAML . No estoy seguro de que almacene algo como JSON o XML, a menos que tenga requisitos de relación significativos.
En cuanto a las alternativas no mencionadas, no descarte Hadoop , que es una implementación de código abierto de MapReduce. Esto debería funcionar bien si tiene una TONELADA de datos poco estructurados que necesitan ser analizados, y desea estar en un escenario en el que simplemente puede agregar 10 máquinas más para manejar el procesamiento de datos.
Por ejemplo, comencé a tratar de analizar el rendimiento que era esencialmente todos los números de tiempo de diferentes funciones registradas en alrededor de 20 máquinas. Después de intentar pegar todo en un RDBMS, me di cuenta de que realmente no necesito consultar los datos nuevamente una vez que los agregué. Y, solo es útil en su formato agregado para mí. Por lo tanto, mantengo los archivos de registro comprimidos y luego dejo los datos agregados en una base de datos.
Tenga en cuenta que estoy más acostumbrado a pensar con tamaños "grandes".
fuente
El sistema de archivos es útil para almacenar datos binarios, que nunca funcionan increíblemente bien en bases de datos relacionales.
fuente
Pruebe Prevayler: http://www.prevayler.org/wiki/ Prevayler es una alternativa a RDBMS. En el sitio tenemos más información.
fuente
Si no necesita ACID , probablemente no necesite la sobrecarga de un RDBMS. Entonces, determina si necesitas eso primero. La mayoría de las respuestas que no son RDBMS proporcionadas aquí no proporcionan ACID.
fuente
http://www.hdfgroup.org/
Si tiene enormes conjuntos de datos, en lugar de crear los suyos, puede usar HDF, el formato de datos jerárquicos.
http://en.wikipedia.org/wiki/Hierarchical_Data_Format :
También es jerárquico como un sistema de archivos, pero los datos se almacenan en un archivo binario mágico.
Piense en petabytes de datos de teledetección de la NASA / JPL.
fuente
G'day
Un caso en el que puedo pensar es cuando los datos que está modelando no se pueden representar fácilmente en una base de datos relacional.
Una vez, tal ejemplo es la base de datos utilizada por los operadores de telefonía móvil para monitorear y controlar estaciones base para redes de telefonía móvil.
Casi todos estos casos, un OO DB se utiliza , ya sea un producto comercial o un sistema auto-enrollado que permite jerarquías de objetos.
Trabajé en una aplicación de monitoreo 3G para una gran empresa que permanecerá sin nombre, pero cuyo logotipo es una mancha de vino tinto (-:, y utilizaron un DB OO para realizar un seguimiento de todos los diversos atributos para las celdas individuales dentro del red.
La interrogación de tales bases de datos se realiza utilizando técnicas patentadas que, por lo general, están completamente libres de SQL.
HTH
salud,
Robar
fuente
Las bases de datos de objetos no son bases de datos relacionales. Pueden ser realmente útiles si solo desea rellenar algunos objetos en una base de datos. También admiten versiones y clases de modificación para objetos que ya existen en la base de datos. db4o es el primero que me viene a la mente.
fuente
En algunos casos (datos del mercado financiero y control de procesos, por ejemplo), es posible que deba usar una base de datos en tiempo real en lugar de un RDBMS. Ver enlace wiki
fuente
Había una herramienta RAD llamada JADE escrita hace unos años que tiene un OODBMS incorporado. Las encarnaciones anteriores del motor DB también eran compatibles con Digitalk Smalltalk. Si desea probar la creación de aplicaciones utilizando un paradigma que no sea RDBMS, esto podría ser un comienzo.
Otros productos OODBMS incluyen Objectivity , GemStone (necesitará obtener VisualWorks Smalltalk para ejecutar la versión Smalltalk, pero también hay una versión java). También hubo algunos proyectos de investigación de código abierto en este espacio: EXODUS y su descendiente SHORE vienen a la mente.
Lamentablemente, el concepto parecía morir, probablemente debido a la falta de un estándar claramente visible y una capacidad de consulta ad-hoc relativamente pobre en relación con los sistemas RDMBS basados en SQL.
Un OODBMS es más adecuado para aplicaciones con estructuras de datos centrales que se representan mejor como un gráfico de nodos interconectados. Solía decir que la aplicación OODBMS por excelencia era una mazmorra multiusuario (MUD) donde las habitaciones contendrían los avatares de los jugadores y otros objetos.
fuente
Puede recorrer un largo camino simplemente usando archivos almacenados en el sistema de archivos. Los RDBMS están mejorando en el manejo de blobs, pero esta puede ser una forma natural de manejar datos de imágenes y similares, particularmente si las consultas son simples (enumerar y seleccionar elementos individuales).
Otras cosas que no encajan muy bien en un RDBMS son las estructuras de datos jerárquicas y supongo que los datos geoespaciales y los modelos 3D tampoco son tan fáciles de trabajar.
Servicios como Amazon S3 proporcionan modelos de almacenamiento más simples (clave-> valor) que no admiten SQL. La escalabilidad es la clave allí.
Los archivos de Excel también pueden ser útiles, especialmente si los usuarios necesitan poder manipular los datos en un entorno familiar y crear una aplicación completa para hacerlo no es factible.
fuente
Hay una gran cantidad de formas de almacenar datos, incluso "databse relacional" cubre una gama de alternativas desde una simple biblioteca de código que manipula un archivo local (o archivos) como si fuera una base de datos relacional en una base de usuario único, a través de sistemas basados en archivos que pueden manejar múltiples usuarios para una generosa selección de sistemas serios basados en "servidor".
Usamos mucho los archivos XML: obtienes datos bien estructurados, buenas herramientas para consultar la posibilidad de realizar ediciones, si es apropiado, algo que sea legible para los humanos y que no tengas que preocuparte por el funcionamiento del motor db (o el funcionamiento del motor db). Esto funciona bien para cosas que son esencialmente de solo lectura (en nuestro caso la mayoría de las veces generadas a partir de una base de datos en otro lugar) y también para sistemas de un solo usuario donde solo puede cargar los datos y guardarlos según sea necesario, pero está creando oportunidades para problemas si desea la edición multiusuario, al menos de un solo archivo.
Para nosotros, eso es todo: vamos a usar algo que hará SQL (MS ofrece un conjunto de herramientas que se ejecutan desde un .DLL para hacer cosas de un solo usuario hasta el servidor de la empresa y todos hablan el mismo SQL (con limitaciones en el extremo inferior)) o vamos a utilizar XML como formato porque (para nosotros) la verbosidad rara vez es un problema.
Actualmente no tenemos que manipular datos binarios en nuestras aplicaciones para que esa pregunta no surja.
Murph
fuente
Uno podría considerar el uso de un servidor LDAP en lugar de una base de datos SQL tradicional si los datos de la aplicación están fuertemente orientados a valores / claves y de naturaleza jerárquica.
fuente
Los archivos BTree suelen ser mucho más rápidos que las bases de datos relacionales. SQLite contiene dentro de ella una biblioteca BTree que está en el dominio público (como en 'dominio público', sin usar el término libremente).
Francamente, si quisiera un sistema multiusuario, necesitaría mucha persuasión para no usar una base de datos relacional de servidor decente.
fuente
Bases de datos de texto completo, que pueden consultarse con operadores de proximidad como "dentro de 10 palabras de", etc.
Las bases de datos relacionales son una herramienta empresarial ideal para muchos propósitos: lo suficientemente fácil de entender y diseñar, lo suficientemente rápido, adecuado incluso cuando no están diseñadas y optimizadas por un genio que podría "usar toda la potencia", etc.
Pero algunos propósitos comerciales requieren indexación de texto completo, que los motores relacionales no proporcionan o agregan como una ocurrencia tardía. En particular, los campos legal y médico tienen grandes extensiones de texto no estructurado para almacenar y caminar.
fuente
También: * Escenarios integrados: donde generalmente se requiere usar algo más pequeño que un RDBMS completo. Db4o es un ODB que puede usarse fácilmente en tal caso. * Desarrollo rápido o de prueba de concepto: donde desea centrarse en el negocio y no preocuparse por la capa de persistencia
fuente
El teorema de CAP lo explica sucintamente. SQL proporciona principalmente "Consistencia fuerte: todos los clientes ven la misma vista, incluso en presencia de actualizaciones".
fuente
BESO: Mantenlo pequeño y simple
fuente
Ofrecería RDBMS :) Si no tiene problemas con la configuración / administración, vaya a SQLite. Construido en RDBMS con soporte completo de SQL. Incluso le permite almacenar cualquier tipo de datos en cualquier columna.
Ventaja principal contra, por ejemplo, el archivo de registro: si tiene uno enorme, ¿cómo va a buscar en él? Con el motor SQL, solo crea índices y acelera la operación dramáticamente.
Acerca de la búsqueda de texto completo: SQLite también tiene módulos para la búsqueda de texto completo.
Simplemente disfrute de una agradable interfaz estándar para sus datos :)
fuente
Una buena razón para no utilizar una base de datos relacional sería cuando tenga un conjunto de datos masivo y desee realizar un procesamiento masivo paralelo y distribuido en los datos. El índice web de Google sería un ejemplo perfecto de tal caso.
Hadoop también tiene una implementación del Sistema de archivos de Google llamado Sistema de archivos distribuidos de Hadoop .
fuente
Recomiendo encarecidamente Lua como alternativa al almacenamiento de datos de tipo SQLite.
Porque:
Esta es la opción de "colección de idiomas nativos" de la respuesta aceptada. Si está utilizando C / C ++ como nivel de aplicación, es perfectamente razonable incluir el motor Lua (100kB de binario) solo por leer configuraciones / datos o escribirlos.
fuente