paint-brush
Escalar bases de datos PostgreSQL ahora es más barato: el almacenamiento por niveles de Timescale llega a la disponibilidad generalpor@timescale
620 lecturas
620 lecturas

Escalar bases de datos PostgreSQL ahora es más barato: el almacenamiento por niveles de Timescale llega a la disponibilidad general

por Timescale14m2023/11/16
Read on Terminal Reader

Demasiado Largo; Para Leer

Timescale anuncia la disponibilidad general de Tiered Storage, una revolucionaria arquitectura de almacenamiento de varios niveles para bases de datos PostgreSQL. Esta innovación permite a los desarrolladores lograr una escalabilidad infinita y de bajo costo para series temporales y bases de datos analíticas. Con el almacenamiento por niveles, los datos más antiguos y a los que se accede con poca frecuencia se pueden trasladar automáticamente a un nivel de almacenamiento más asequible, lo que reduce los costos sin sacrificar el rendimiento. La arquitectura admite una gestión de datos perfecta utilizando las hipertablas de PostgreSQL, lo que proporciona una solución sencilla y rentable para implementaciones a gran escala. El modelo de precio fijo de 0,021 dólares por GB/mes para almacenamiento de bajo costo lo hace transparente y predecible, lo que garantiza que los desarrolladores puedan escalar sus bases de datos de manera eficiente.
featured image - Escalar bases de datos PostgreSQL ahora es más barato: el almacenamiento por niveles de Timescale llega a la disponibilidad general
Timescale HackerNoon profile picture


Productos como Amazon RDS para PostgreSQL están bien para implementaciones más pequeñas, pero escalar PostgreSQL es una historia diferente. Una vez que el proyecto crece a muchos terabytes, estas bases de datos administradas se vuelven lentas y costosas, lo que hace que la gestión de datos sea mucho más compleja.


El rendimiento se ve afectado una vez que las tablas alcanzan miles de millones de filas y mientras hay maneras de mejorarlo , los datos seguirán creciendo. Sin una gestión de datos adecuada, los desarrolladores sólo pueden ver cómo sus discos (y facturas) aumentan de tamaño.


Pero ya no más. Hoy, nos complace anunciar la disponibilidad general del almacenamiento por niveles, una arquitectura de almacenamiento de varios niveles diseñada para permitir una escalabilidad infinita y de bajo costo para sus series temporales y bases de datos analíticas en la plataforma Timescale. Ahora puede almacenar sus datos más antiguos a los que accede con poca frecuencia en un nivel de almacenamiento de bajo costo y al mismo tiempo poder acceder a ellos, sin sacrificar nunca el rendimiento de los datos a los que accede con frecuencia.


Esto es lo que sucede cuando insertas datos en una base de datos de series temporales de Timescale con nuestro nuevo backend de almacenamiento de varios niveles:


  1. Sus datos más recientes se escribirán en un nivel de almacenamiento de alto rendimiento optimizado para consultas rápidas e ingestas elevadas.


  2. Una vez que no acceda a esos datos con frecuencia, puede organizarlos automáticamente en un nivel de almacenamiento de objetos de menor costo configurando una política de niveles. Los datos en el nivel de almacenamiento de bajo costo siguen siendo totalmente consultables dentro de su base de datos y no hay límite para la cantidad de datos que puede almacenar: hasta cientos de TB o más. Nuestro nivel de almacenamiento de bajo costo tiene un precio fijo de $0,021 por GB/mes para datos, más barato que Amazon S3.


Timescale ahora tiene un backend de almacenamiento por niveles, que combina dos niveles de almacenamiento para aprovechar el rápido rendimiento de las consultas y una escalabilidad asequible.



Los desarrolladores necesitan una forma económica de escalar sus grandes bases de datos PostgreSQL en AWS sin comprometer el rendimiento. Si bien los almacenes de objetos son sorprendentemente escalables y asequibles, no son los más rápidos y los desarrolladores también necesitan obtener respuestas a las consultas de milisegundos para sus aplicaciones.


Sin embargo, una vez que los datos se vuelven obsoletos y rara vez se accede a ellos, el rendimiento en tiempo real a menudo no es tan esencial. Los desarrolladores aún necesitan poder acceder a estos datos históricos para consultas ad hoc, análisis de datos o cumplimiento normativo, pero pueden asumir cierta latencia para este tipo de consultas. Ahora, lo que quieren los desarrolladores es la capacidad de almacenar estos datos históricos de la manera más asequible y eficiente posible.


Esta nueva arquitectura de almacenamiento por niveles libera a los desarrolladores de elegir entre costos de almacenamiento y compensaciones de rendimiento para aplicaciones en tiempo real. Al mantener sus datos recientes y a los que accede con frecuencia en el nivel de alto rendimiento, aprovecharán la velocidad de consulta de milisegundos y las capacidades de ingesta de Timescale, y al clasificar sus datos más antiguos en niveles, podrán mantener tantos TB como necesiten en sus bases de datos PostgreSQL para menos.


Gestión de datos de PostgreSQL con almacenamiento por niveles: lo que necesita saber

La arquitectura de almacenamiento por niveles de Timescale aprovecha la flexibilidad de PostgreSQL y hipertablas para una gestión eficaz de los datos. Al crear una hipertabla, ahora se puede extender sin problemas a ambos niveles de almacenamiento; cuando ejecutas una consulta , Timescale determina sin problemas a qué niveles de almacenamiento acceder para generar la respuesta, lo que aumenta el rendimiento de sus datos más recientes y reduce los costos de almacenamiento de los datos más antiguos. No hay cargos adicionales por consulta o lectura de datos ni tarifas ocultas, lo que permite una gestión de datos sencilla y rentable.


Esta arquitectura de almacenamiento también elimina cualquier limitación de almacenamiento en los servicios de Timescale: dado que nuestro nivel de almacenamiento de bajo costo es infinito, puede almacenar tantos TB como desee. Por ejemplo, Estamos aprovechando internamente el almacenamiento por niveles para almacenar la enorme base de datos Timescale que impulsa nuestro producto Insights.


Esta base de datos de Insights recopila y analiza constantemente estadísticas de consultas de toda nuestra flota de clientes, y hoy ha superado los 350 TB y está creciendo rápidamente. De esos 350 TB, 250 TB están escalonados para almacenamiento de bajo costo.


Hagamos los cálculos:


  • Almacenamos 5 TB en nuestro nivel de almacenamiento de alto rendimiento después de la compresión. Por supuesto, tenemos la compresión habilitada y estamos obteniendo índices de compresión de 20x, lo que significa que lo que originalmente eran 100 TB de datos de Postgres ahora cabe en un disco de 5 TB gracias a la compresión (!).


  • Los 250 TB de datos restantes se almacenan en el nivel de almacenamiento de bajo costo. Esta clasificación por niveles se produce automáticamente una vez que los datos alcanzan una determinada antigüedad, que actualmente tiene varias semanas.


Nuestros clientes con grandes implementaciones también ya están utilizando el almacenamiento por niveles:


"Realizamos muchos análisis de datos de mercado, y el gran volumen de datos que necesitamos almacenar hace que una solución normal de base de datos basada en disco sea inviable (es simplemente demasiado costosa). El almacenamiento por niveles de Timescale nos permite mover sin problemas grandes volúmenes de datos a la capa de almacenamiento de objetos. Esta es una gran solución para almacenar grandes volúmenes de datos históricos y realizar análisis posteriores. Sin esto, nos veríamos obligados a desarrollar una solución internamente".


- Director de tecnología en una empresa de comercio de activos digitales patentada



La simplicidad es la característica clave del almacenamiento por niveles. Para mover sus datos del nivel de alto rendimiento al nivel de objetos de bajo costo, todo lo que necesita hacer es utilizar nuestro API sencilla para definir políticas para clasificar sus datos a medida que envejecen en una hipertabla en particular. Las políticas de clasificación de datos funcionan por fragmentos (la política clasificará por niveles los fragmentos completos una vez que alcancen la edad definida por la política). No es necesario ningún proceso ETL (extracción-transformación-carga) ni cambios de infraestructura.


Nota del editor: las hipertablas de escala de tiempo son tablas de PostgreSQL particionadas automáticamente por tiempo. Esas particiones se llaman fragmentos. Los fragmentos son la unidad de políticas definidas por el usuario en Timescale: por ejemplo, cuando define una política de retención de datos, eliminará particiones enteras (fragmentos) y cuando mueva datos entre niveles de almacenamiento, moverá fragmentos completos. . Esta es una forma muy conveniente de administrar datos desde la perspectiva de la utilización de recursos y la experiencia del desarrollador.


Por ejemplo, esta política movería todos los datos de más de un mes al almacenamiento de objetos en su hipertabla events :


 SELECT add_tiering_policy('events', INTERVAL '1 month');


¡Eso es todo lo que necesitas! Todo lo demás sucede automáticamente, incluida la planificación inteligente de consultas que solo ejecuta consultas SQL en el nivel apropiado.


Para eliminar los datos almacenados actualmente en el nivel de almacenamiento de bajo costo, puede definir una política de retención de datos para que los datos se eliminen automáticamente después de un período determinado (por ejemplo, después de cinco años). También puedes eliminar manualmente fragmentos específicos. .


Además, si desea “retroceder” una porción particular del nivel de almacenamiento de bajo costo al nivel de alto rendimiento ( por ejemplo, si necesita rellenar o actualizar datos ), puedes “desnivelarlo” fácilmente.


 -- Untier a particular chunk CALL untier_chunk('_hyper_1_1_chunk');


Puede realizar un seguimiento de la cantidad de datos que se han estratificado (y cuánto costarán al final del mes) en la consola Timescale:


La pantalla Descripción general en la interfaz de usuario de Timescale le mostrará cuántos datos tiene en la capa de almacenamiento de bajo costo y una estimación de cuánto pagará por ellos.


Y hablando de estimaciones de facturación…


¿Cuánto puedo ahorrar con el almacenamiento por niveles?

Nuestro nivel de almacenamiento de alto rendimiento tiene un precio efectivo de $0,177 por GB/mes de datos. después de la compresión (teniendo en cuenta la tasa de compresión esperada que vemos en nuestra flota). A esto ahora se le suma una capa de almacenamiento de bajo costo con una tarifa fija de $0,021 por GB/mes de datos, con el mismo precio en todas las regiones de la nube.


Al organizar los datos en niveles, solo pagará por los datos que almacene , no por las consultas ejecutadas o la cantidad de datos escaneados: este es realmente un precio fijo. Nuestro objetivo con esta estructura de precios era proporcionar una forma transparente, inequívoca y sencilla de calcular el costo total de almacenamiento de datos, facilitando la administración de sus datos.


Como ejemplo rápido, digamos que tiene una Hypertable con 5,2 TB de almacenamiento, con fragmentos de Hypertable recientes y otras tablas de Postgres que ocupan aproximadamente 200 GB y alrededor de 5 TB de datos de Hypertable con más de un mes. No accede ni consulta estos datos antiguos con frecuencia, lo que significa que no los necesita para las operaciones diarias de su aplicación. Aún así, le gustaría mantenerlo accesible en su base de datos para consultas ad hoc o requisitos de cumplimiento (vemos muchos casos de este tipo entre nuestros clientes).


Como estrategia rentable de gestión de datos, puede colocar todos los fragmentos de más de un mes en el nivel de bajo costo y reducir el costo de almacenar esos 5 TB de datos de alrededor de $478/mes a alrededor de $105/mes, una disminución del 78%. en su factura de almacenamiento. ( Para esta estimación, asumimos que habilitó la compresión para su hipertabla y considera la compresión general mediana en todos los servicios de Timescale).


Mover los datos a los que accede con poca frecuencia al nivel de almacenamiento de bajo costo le permitirá ahorrar una cantidad significativa de dinero, lo que hará que su factura de almacenamiento sea muy asequible.


Los ahorros aumentarán junto con sus datos: al transferir varios terabytes a este nivel de bajo costo, su factura de almacenamiento disminuirá de miles de dólares a unos pocos cientos. La siguiente tabla de referencia ilustra cuán asequible es realmente nuestro nivel de almacenamiento de bajo costo.



¡Tú entiendes!


El efecto multiplicador del ahorro del almacenamiento por niveles

Hay una cosa más que hace que el almacenamiento por niveles sea aún más sorprendente: cuando mantiene los datos en el nivel de almacenamiento de bajo costo, paga por estos datos solo una vez, independientemente de si tiene una réplica de alta disponibilidad o réplicas de lectura ejecutándose en su servicio. .


Lo mismo se aplica a las horquillas. En Timescale, puede crear copias de su base de datos principal (las llamamos bifurcaciones) haciendo clic en un botón de la interfaz de usuario, por ejemplo, para ejecutar pruebas o crear entornos de desarrollo. Al crear una (o más) bifurcaciones, no se le facturarán los datos compartidos con la principal en el almacenamiento de bajo costo . Si decide agrupar más datos que no están en el nivel principal, pagará para almacenarlos en el nivel de bajo costo, pero aún así se beneficiará de ahorros sustanciales al pasarlos del nivel de alto rendimiento de la bifurcación al nivel más económico. .


Para que esto quede muy claro, presentemos un ejemplo. Imagina que tienes un servicio primario con 6,5 TB de datos y que también tienes configurado:


  • Una réplica de alta disponibilidad para reducir significativamente el riesgo de tiempo de inactividad y pérdida de datos debido a fallas.


  • Una réplica de lectura para atender sus consultas de lectura y permitir que el principal se dedique por completo a las escrituras.


  • Una bifurcación de ese servicio para fines de desarrollo y prueba.


Desde una perspectiva de facturación, si mantuviera los 6,5 TB de datos en su servicio principal en el nivel de almacenamiento de alto rendimiento, vería reflejados [6,5 TB x 4] en su factura de almacenamiento para contabilizar las dos réplicas, la bifurcación y el servicio primario: 26 TB en total. Suponiendo nuestra tasa de compresión media, esto sería costoso: alrededor de 4.602 dólares al mes.


Pero, ¿qué sucede si su aplicación necesita acceder activamente solo a los 500 GB de datos más recientes? Puede almacenar 6 TB en niveles de almacenamiento de bajo costo y solo conservar 500 GB en su nivel de almacenamiento de alto rendimiento. Y dado que solo paga una vez por los datos en su nivel de almacenamiento de bajo costo, así es como se vería su nueva factura de almacenamiento:


  • [500 GB x 4] = 2 TB en almacenamiento de alto rendimiento (en lugar de 26 TB)


  • [6 TB x 1] en el nivel de almacenamiento de bajo costo


La factura de almacenamiento anterior ascendería a aproximadamente $480 al mes: ¡ahorraría más de $4000 al mes! Este es el efecto multiplicador del ahorro del almacenamiento por niveles. Especialmente si ejecuta réplicas o bifurcaciones, es una gran idea aprovechar el nivel de almacenamiento de bajo costo; los ahorros que verá en su factura general serán muy significativos.


Nuestro viaje de almacenamiento por niveles

Lanzamos una versión temprana de nuestra funcionalidad de almacenamiento por niveles en la plataforma Timescale como acceso anticipado en marzo. Después de muchas mejoras, ahora ha alcanzado la disponibilidad general. Desde su primer lanzamiento, hemos trabajado arduamente para hacer que el almacenamiento por niveles sea estable, confiable y más rápido.


También pensamos detenidamente en nuestro modelo de precios, iterando constantemente sobre múltiples formas de fijar el precio de nuestro nivel de almacenamiento de bajo costo. Finalmente, nos inclinamos por lo más simple: una tarifa plana sobre la precompresión del volumen de datos. Ya hemos mencionado que valoramos los precios simples y predecibles, pero también era importante para nosotros ofrecer un precio por GB/mes lo más bajo posible. Nuestro precio llegó a $0,021; a modo de comparación, almacenar archivos en Amazon S3 cuesta $0,023 por GB/mes .


Personalmente, yo (Yannis) debo admitir que después de liderar equipos que crearon soluciones nativas de la nube durante más de una década, todavía tengo que volver atrás y ocasionalmente volver a verificar varias tablas de tarifas en varias páginas de precios de la nube, especialmente buscando tarifas adicionales, cada vez que Quiero calcular los costos totales de nuestros servicios con precisión.


En Timescale, creemos que no debería tener que crear una hoja de cálculo complicada para poder ejecutar un servicio de base de datos o tomar decisiones informadas sobre las capas de almacenamiento.


Nuestro compromiso de hacer la vida de los desarrolladores más fácil nos llevó a la tarifa plana de $0,021 por GB/mes, sin conjeturas, costos ocultos ni cargos por consulta o lectura de datos.


La precompresión del volumen de datos significa el volumen de datos antes de aplicar la compresión de escala de tiempo. Por ejemplo, debido a la compresión de escala de tiempo, un volumen de 500 GB en el nivel de almacenamiento de alto rendimiento podría terminar necesitando solo 50 GB de espacio en disco una vez comprimido. Si decide dividir estos datos en almacenamiento de bajo costo, su factura se calculará sobre el volumen original de 500 GB, es decir, [500 GB * $0,021] por mes.


Cómo funciona el almacenamiento por niveles: entre bastidores

Todos los datos insertados en Timescale se escriben inicialmente en nuestra capa de almacenamiento de alto rendimiento. El uso de discos más rápidos para sus datos más recientes brindará un rendimiento superior de inserción y consulta para sus valores más recientes, un patrón de uso que se adapta a las necesidades de las aplicaciones con uso intensivo de datos.


Por el contrario, el nivel de almacenamiento de bajo costo es un almacén de objetos creado en Amazon S3. Sin embargo, este almacén de objetos es mucho más que un depósito externo para archivar sus datos: es una parte integral de su base de datos. Cuando mueve datos a este nivel de almacenamiento de objetos, su base de datos seguirá siendo plenamente consciente de toda la semántica y los metadatos, y podrá seguir realizando consultas como de costumbre con SQL estándar (aunque con un rendimiento más lento).


Detrás de escena, almacenamos los datos en un formato de columnas comprimido (específicamente, Apache Parquet ). Cuando los datos están en niveles, los fragmentos almacenados en el formato de base de datos interno nativo de Timescale (normalmente en nuestro compresión columnar nativa ) se convierten de forma asíncrona al formato Parquet y se almacenan en el objeto S3 subyacente. Hemos creado varios mecanismos para garantizar que los fragmentos escalonados se almacenen de forma duradera en el nivel de almacenamiento de bajo costo antes de eliminarlos transaccionalmente del nivel de alto rendimiento.


Cuando ejecute su consulta SQL, extraerá datos de forma transparente del nivel de almacenamiento de alto rendimiento, del nivel de almacenamiento de objetos o de ambos, según sea necesario. Cuando decimos transparente, queremos decir transparente: Timescale admite consultas arbitrariamente complejas en sus datos estándar y en niveles, incluidos predicados complejos, JOIN, CTE, ventanas, hiperfunciones y más.


En la consulta de ejemplo siguiente (con una cláusula EXPLAIN ), puede ver cómo el plan de consulta incluye un Foreign Scan cuando la base de datos accede a datos desde el nivel de almacenamiento de objetos. En este ejemplo, devices y sites son tablas estándar de Postgres (que residen únicamente en el almacenamiento de alto rendimiento), mientras que metrics son una hipertabla que se extiende a través de ambos niveles de almacenamiento. Al ejecutar esta consulta en la hipertabla de metrics , tres de sus fragmentos se leyeron desde el almacenamiento estándar y cinco fragmentos se leyeron desde el almacenamiento de objetos.



 EXPLAIN SELECT time_bucket('1 day', ts) as day, max(value) as max_reading, device_id FROM metrics JOIN devices ON metrics.device_id = devices.id JOIN sites ON devices.site_id = sites.id WHERE sites.name = 'DC-1b' GROUP BY day, device_id ORDER BY day; QUERY PLAN ---------------------------------------------------------- GroupAggregate Group Key: (time_bucket('1 day'::interval, _hyper_5666_706386_chunk.ts)), _hyper_5666_706386_chunk.device_id -> Sort Sort Key: (time_bucket('1 day'::interval, _hyper_5666_706386_chunk.ts)), _hyper_5666_706386_chunk.device_id -> Hash Join Hash Cond: (_hyper_5666_706386_chunk.device_id = devices.id) -> Append -> Seq Scan on _hyper_5666_706386_chunk -> Seq Scan on _hyper_5666_706387_chunk -> Seq Scan on _hyper_5666_706388_chunk -> Foreign Scan on osm_chunk_3334 -> Hash -> Hash Join Hash Cond: (devices.site_id = sites.id) -> Seq Scan on devices -> Hash -> Seq Scan on sites Filter: (name = 'DC-1b'::text)



En el plan de consulta anterior, el Foreign Scan on osm_chunk_3334 corresponde a recuperar datos del nivel de almacenamiento de objetos sin fondo.


Para evitar procesar fragmentos que queden fuera de la ventana de tiempo de la consulta, realizamos una exclusión de fragmentos para tocar solo los fragmentos que son necesarios para satisfacer la consulta. La base de datos almacena varias formas de metadatos para crear un "mapa" de grupos de filas y desplazamientos de columnas dentro del almacenamiento de objetos.


Además, cuando se ejecuta una consulta, es aún más selectiva con respecto a los datos que lee. Si su consulta solo toca un rango de filas y algunas columnas, solo se lee ese subconjunto de datos del objeto S3 detrás del nivel de almacenamiento de bajo costo.


En lo anterior, por ejemplo, solo se leen las columnas device_id y value del nivel de almacenamiento de objetos. Si se hubiera incluido un filtro WHERE adicional basado en el tiempo, la base de datos primero usaría sus metadatos (almacenados en un almacenamiento de alto rendimiento y almacenados en caché en la memoria) para reducir aún más qué archivos Parquet y grupos de filas deben leerse para ejecutar la consulta. Todo para reducir la latencia de las consultas incluso al acceder a este almacenamiento sin fondo de forma transparente a través de PostgreSQL.


Pruebe el almacenamiento por niveles

Las decisiones de almacenamiento en torno a datos históricos no tienen por qué ser costosas. En Timescale, ahora tiene acceso a un nivel de almacenamiento infinito y de bajo costo sin trampas de precios que le permite escalar el almacenamiento de su base de datos por un precio asequible sin comprometer el rendimiento de su aplicación.


Si se pregunta si esta es una buena solución para su caso de uso, Consulte nuestros documentos para obtener más información y casos de uso. Si buscas una perspectiva más práctica, también puedes experimentar con Almacenamiento por niveles de forma gratuita en la plataforma Timescale a través de nuestra prueba gratuita (no se requiere tarjeta de crédito) .


- Escrito por Yannis Roussos, Carlota Soto y Ana Tavares.


También publicado aquí.