{"id":14594,"date":"2023-07-26T12:16:39","date_gmt":"2023-07-26T19:16:39","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=14594"},"modified":"2024-02-07T11:56:01","modified_gmt":"2024-02-07T19:56:01","slug":"introducing-couchbase-time-series","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/introducing-couchbase-time-series\/","title":{"rendered":"Apresentando a s\u00e9rie temporal do Couchbase"},"content":{"rendered":"<p><span style=\"font-weight: 400\">O Couchbase tem o prazer de anunciar o lan\u00e7amento de um novo recurso de s\u00e9rie temporal como parte do Couchbase 7.2. Esse recurso foi desenvolvido com base na robusta arquitetura de banco de dados distribu\u00eddo do Couchbase, que foi projetada para ser dimensionada horizontalmente \u00e0 medida que seus dados crescem, ao mesmo tempo em que oferece redund\u00e2ncia e alta disponibilidade integradas. Isso significa que, \u00e0 medida que sua empresa cresce e suas necessidades de dados de s\u00e9ries temporais aumentam, o Couchbase pode se expandir sem esfor\u00e7o para atender a essas necessidades, tornando-o uma solu\u00e7\u00e3o ideal para empresas de todos os tamanhos.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Essa nova t\u00e9cnica inovadora para gerenciar dados de s\u00e9ries temporais abre um mundo totalmente novo de possibilidades para os usu\u00e1rios do Couchbase. Com a capacidade de armazenar e analisar grandes quantidades de dados de s\u00e9ries temporais usando o Couchbase SQL++ e SDKs. Isso permite que os usu\u00e1rios aproveitem o conhecimento e a infraestrutura existentes, facilitando a configura\u00e7\u00e3o e o desbloqueio de insights poderosos para explorar tend\u00eancias de dados com facilidade.\u00a0<\/span><\/p>\n<h2><span style=\"font-weight: 400\">Principais benef\u00edcios das s\u00e9ries temporais\u00a0<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Os dados de s\u00e9ries temporais s\u00e3o armazenados em documentos JSON no banco de dados Couchbase Multi Model. Ele oferece o mesmo alto desempenho, cache avan\u00e7ado para recupera\u00e7\u00e3o r\u00e1pida de dados e baixa lat\u00eancia. O servi\u00e7o Couchbase Query SQL++ e Index aprimoram os recursos de recupera\u00e7\u00e3o de dados para permitir casos de uso de consultas anal\u00edticas complexas.<\/span><\/p>\n<p><span style=\"font-weight: 400\">O suporte a dados de s\u00e9rie temporal no Couchbase oferece esses benef\u00edcios adicionais:<\/span><\/p>\n<ol>\n<li style=\"list-style-type: none\">\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Armazenamento eficiente para grandes volumes de pontos de dados de s\u00e9ries temporais<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Armazenamento otimizado da estrutura de dados para pontos de dados com registro de data e hora<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Novos recursos avan\u00e7ados de consulta de s\u00e9ries temporais<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Baixo requisito de armazenamento de \u00edndice<\/span><\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<h2><span style=\"font-weight: 400\">Exemplos de casos de uso de s\u00e9ries temporais<\/span><\/h2>\n<p><span style=\"font-weight: 400\"><strong>Negocia\u00e7\u00e3o financeira <\/strong>A negocia\u00e7\u00e3o financeira depende da an\u00e1lise de grandes quantidades de dados em tempo real, incluindo pre\u00e7os de a\u00e7\u00f5es, taxas de c\u00e2mbio e pre\u00e7os de commodities. A an\u00e1lise de dados de s\u00e9ries temporais pode ajudar os traders a identificar tend\u00eancias e tomar decis\u00f5es informadas sobre compra e venda.<\/span><\/p>\n<p><span style=\"font-weight: 400\"><strong>Monitoramento da Internet das Coisas (IoT) <\/strong>Os dispositivos de IoT geram uma grande quantidade de dados de s\u00e9ries temporais, incluindo leituras de temperatura, consumo de energia e dados de sensores. Esses dados podem ser analisados em tempo real para detectar anomalias e prever falhas nos equipamentos antes que elas ocorram.<\/span><\/p>\n<p><span style=\"font-weight: 400\"><strong>Manuten\u00e7\u00e3o preditiva <\/strong>Muitos setores dependem de equipamentos e maquin\u00e1rio caros, e o tempo de inatividade pode custar caro. Ao analisar dados de s\u00e9ries temporais de sensores e outras fontes, as organiza\u00e7\u00f5es podem prever quando o equipamento provavelmente falhar\u00e1 e programar proativamente a manuten\u00e7\u00e3o para minimizar o tempo de inatividade e maximizar a efici\u00eancia.<\/span><\/p>\n<h2><span style=\"font-weight: 400\">Principais recursos da s\u00e9rie temporal do Couchbase<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Voc\u00ea pode armazenar dados de s\u00e9ries temporais no Couchbase, usando nosso SDK\/SQL++ para carregar, e o recurso de consulta anal\u00edtica avan\u00e7ada com o \u00cdndice Secund\u00e1rio Global para consultar\/analisar os dados da mesma forma que com documentos JSON normais.<\/span><\/p>\n<h3><span style=\"font-weight: 400\">Efici\u00eancia de armazenamento<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Os conjuntos de dados de s\u00e9ries temporais geralmente s\u00e3o muito grandes, com cada ponto de dados composto por atributos, como registro de data e hora, valor(es), granularidade e outras informa\u00e7\u00f5es relacionadas. O armazenamento eficiente \u00e9 essencial, pois pode determinar a rapidez com que os dados podem ser consultados para an\u00e1lise.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">A s\u00e9rie temporal do Couchbase usa duas especifica\u00e7\u00f5es para melhorar a efici\u00eancia do armazenamento.<\/span><\/p>\n<p><b>O uso de matrizes para pontos de dados<\/b><span style=\"font-weight: 400\"> - Por sua pr\u00f3pria natureza, os dados de s\u00e9ries temporais s\u00e3o uma s\u00e9rie de pontos de dados. Esses pontos de dados compartilham uma estrutura comum, por exemplo, tempo e valores, ou quaisquer outros atributos associados ao momento em que o ponto de dados foi coletado.\u00a0\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">O uso de uma matriz para armazenar um conjunto de pontos de dados para um determinado intervalo pode reduzir muito o custo de armazenamento, em compara\u00e7\u00e3o com a necessidade de armazenar cada ponto de dados individual como um documento separado no banco de dados.\u00a0<\/span><\/p>\n<p><b>O uso da posi\u00e7\u00e3o da matriz<\/b><span style=\"font-weight: 400\"> - Observe tamb\u00e9m que os elementos da matriz de pontos de dados n\u00e3o t\u00eam um nome de campo associado, mas dependem da posi\u00e7\u00e3o do elemento na matriz. Neste exemplo, os tr\u00eas elementos da matriz s\u00e3o: a data de observa\u00e7\u00e3o, o valor de abertura e o valor de fechamento da a\u00e7\u00e3o.<\/span><\/p>\n<pre class=\"lang:js decode:true\">docid:\u00a0 \"stock:XYZ:d1\"\r\n{\r\n\u00a0 \"ts_data\": [ [1672531200000, 92.08, 95.62],[1672531201000, 95.62, 99.25],..]\r\n}<\/pre>\n<p><b>Use o tempo EPOCH -\u00a0<\/b><span style=\"font-weight: 400\"><a href=\"https:\/\/en.wikipedia.org\/wiki\/Epoch_(computing)\">Tempo de \u00e9poca<\/a> \u00e9 usado em vez da cadeia de datas ISO para reduzir o tamanho de cada ponto de dados e melhorar o tempo de processamento.\u00a0<\/span><\/p>\n<pre class=\"lang:js decode:true\">docid:\u00a0 \"stock:XYZ:d1\"\r\n{\r\n\u00a0 \"ts_data\": [ [1672531200000, 92.08, 95.62],[1672531201000, 95.62, 99.25],..]\r\n\u00a0 \"ts_start\": 1672531200000 \/* dstart and dend denote the *\/\r\n\u00a0 \"ts_end\": \u00a0 1672617599999,\/* time range of all data points in ts_data *\/\u00a0 \u00a0 \u00a0\r\n\u00a0 \"ticker\": \u00a0 \"XYZ\"\r\n}<\/pre>\n<h3><span style=\"font-weight: 400\">Consulta otimizada com uma nova fun\u00e7\u00e3o _timeseries<\/span><\/h3>\n<p><span style=\"font-weight: 400\">O recurso Couchbase Time Series inclui um novo<\/span> <b>_timeseries<\/b> <span style=\"font-weight: 400\">fun\u00e7\u00e3o. A fun\u00e7\u00e3o atende a v\u00e1rios prop\u00f3sitos:<\/span><\/p>\n<ol>\n<li style=\"list-style-type: none\">\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Ele gera dinamicamente os objetos de s\u00e9rie temporal a partir do <\/span><span style=\"font-weight: 400\">ts_data <\/span><span style=\"font-weight: 400\">matriz de matrizes<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Ele transmite os resultados com efici\u00eancia quando \u00e9 usado com UNNEST, otimizando o tempo de resposta e o uso da mem\u00f3ria<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Ele pode gerar automaticamente o registro de data e hora para cada ponto de dados quando o par\u00e2metro ts_interval \u00e9 usado<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Ele oferece suporte a casos de uso de s\u00e9ries temporais mais avan\u00e7ados para intervalos irregulares de pontos de dados de s\u00e9ries temporais, como, por exemplo, em vez de v\u00e1rios conjuntos de pontos de dados por registro de data e hora<\/span><\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">Consulte o <\/span><a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/time-series.html\"><span style=\"font-weight: 400\">Documenta\u00e7\u00e3o de s\u00e9ries temporais do Couchbase<\/span><\/a><span style=\"font-weight: 400\"> para obter mais detalhes.<\/span><\/p>\n<h3><span style=\"font-weight: 400\">Armazenamento otimizado de \u00edndices<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Devido \u00e0 forma como o Couchbase armazena dados de s\u00e9ries temporais, com cada ponto de dados armazenado como um elemento em uma matriz dentro de um documento JSON, podemos otimizar nossa estrat\u00e9gia de indexa\u00e7\u00e3o do banco de dados. Especificamente, como cada documento cont\u00e9m a hora inicial e final de todos os pontos de dados na matriz, podemos criar uma \u00fanica defini\u00e7\u00e3o de \u00edndice para cada documento. Isso significa que, mesmo para grandes conjuntos de dados de s\u00e9ries temporais com milh\u00f5es de pontos de dados, podemos armazenar os dados em apenas alguns documentos, em vez de um documento por ponto de dados.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Por exemplo, um conjunto de dados de s\u00e9rie temporal com 1 milh\u00e3o de pontos de dados pode ser armazenado em apenas 1.000 documentos, supondo que cada <em>ts_data<\/em> pode armazenar at\u00e9 1.000 elementos de dados e o tamanho do documento permanece abaixo do limite de 20 MB de documentos JSON do Couchbase. Isso n\u00e3o apenas reduz o n\u00famero de documentos necess\u00e1rios para armazenar os dados, mas tamb\u00e9m leva a tamanhos de \u00edndice menores, melhorando o desempenho do banco de dados e reduzindo os requisitos de espa\u00e7o em disco.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Em resumo, aproveitando a capacidade do Couchbase de armazenar dados de s\u00e9ries temporais como matrizes dentro de documentos JSON, podemos otimizar nossa estrat\u00e9gia de indexa\u00e7\u00e3o para reduzir significativamente o n\u00famero de documentos necess\u00e1rios e reduzir o tamanho do \u00edndice, resultando em um desempenho de consulta mais r\u00e1pido e no uso mais eficiente dos recursos de armazenamento.<\/span><\/p>\n<pre class=\"lang:js decode:true\">CREATE INDEX ix1 ON docs(ticker, ts_end, ts_start);<\/pre>\n<h3><span style=\"font-weight: 400\">Reten\u00e7\u00e3o de dados\u00a0<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Os documentos de s\u00e9rie temporal s\u00e3o armazenados como documentos JSON padr\u00e3o no Couchbase. Portanto, o mesmo Time-To-Live (TTL) pode ser definido durante o processo de carregamento de dados.<\/span><\/p>\n<pre class=\"lang:js decode:true\">\/* The document will be automatically removed in 30 days *\/\r\n\r\nINSERT INTO coll1 (KEY, VALUE)\u00a0\r\n\r\n\u00a0\u00a0\u00a0VALUES (\"stock:XYZ:d1\", {\"ticker\":\"XYZ\",..}, {\"expiration\":60*60*24*30});<\/pre>\n<h2><span style=\"font-weight: 400\">Exemplo de passo a passo<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Ent\u00e3o, vamos percorrer o processo de carregamento de um conjunto de dados de pre\u00e7os de a\u00e7\u00f5es reais no Couchbase usando o modelo de dados de s\u00e9rie temporal, conforme definido pelo recurso.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Como descrevi acima, o recurso de s\u00e9rie temporal do Couchbase requer o documento JSON nesse formato espec\u00edfico:<\/span><\/p>\n<pre class=\"lang:js decode:true\">docid:\u00a0 \"stock:XYZ:d1\"\r\n{\r\n\u00a0 \"ts_data\": [ [1672531200000, 92.08, 95.62],[1672531201000, 95.62, 99.25],..]\r\n\u00a0 \"ts_start\": 1672531200000 \/* dstart and dend denote the *\/\r\n\u00a0 \"ts_end\": \u00a0 1672617599999,\/* time range of all data points in ts_data *\/\u00a0 \u00a0 \u00a0\r\n\u00a0 \"ticker\": \u00a0 \"XYZ\"\r\n}<\/pre>\n<p><span style=\"font-weight: 400\">Siga as etapas abaixo se precisar converter seus pr\u00f3prios dados de s\u00e9rie temporal no formato acima.<\/span><\/p>\n<p><span style=\"font-weight: 400\">O conjunto de dados usado aqui \u00e9 para o pre\u00e7o das a\u00e7\u00f5es da XYZ Inc de 2013 a 2015.\u00a0<\/span><\/p>\n<p><b>XYZ_data.csv<\/b><\/p>\n<pre class=\"lang:default decode:true\">date,open,high,low,close,volume,Name\r\n2013-02-08,27.285,27.595,27.24,27.295,5100734,XYZ\r\n2013-02-11,27.64,27.95,27.365,27.61,8916290,XYZ\r\n2013-02-12,27.45,27.605,27.395,27.545,3866508,XYZ<\/pre>\n<h3><span style=\"font-weight: 400\">Migrar dados para a estrutura de dados de s\u00e9rie temporal do Couchbase<\/span><\/h3>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Carregue o arquivo CSV em uma cole\u00e7\u00e3o do Couchbase:<\/span><\/li>\n<\/ol>\n<pre class=\"lang:default decode:true\">cbimport csv --infer-types -c https:\/\/&lt;cluster&gt;:8091 -u &lt;login&gt; -p &lt;password&gt; -d 'file:\/\/XYZ_data.csv' -b 'ts' --scope-collection-exp \"s1.c1\" -g \"#UUID#\"<\/pre>\n<p><span style=\"font-weight: 400\">A importa\u00e7\u00e3o criar\u00e1 um documento JSON na cole\u00e7\u00e3o <em>c1<\/em> para cada ponto de dados.<\/span><\/p>\n<pre class=\"lang:js decode:true\">{\r\n\u00a0 \u00a0 \"c1\": {\r\n\u00a0 \u00a0 \u00a0 \"Name\": \"XYZ\",\r\n\u00a0 \u00a0 \u00a0 \"close\": 55.99,\r\n\u00a0 \u00a0 \u00a0 \"date\": \"2016-05-25T00:00:00.000Z\",\r\n\u00a0 \u00a0 \u00a0 \"high\": 56.69,\r\n\u00a0 \u00a0 \u00a0 \"low\": 55.7699,\r\n\u00a0 \u00a0 \u00a0 \"open\": 56.47,\r\n\u00a0 \u00a0 \u00a0 \"volume\": 9921707\r\n\u00a0 \u00a0 }\r\n\u00a0 },\r\n\u00a0 {\r\n\u00a0 \u00a0 \"c1\": {\r\n\u00a0 \u00a0 \u00a0 \"Name\": \"XYZ\",\r\n\u00a0 \u00a0 \u00a0 \"close\": 31.075,\r\n\u00a0 \u00a0 \u00a0 \"date\": \"2013-06-11T00:00:00.000Z\",\r\n\u00a0 \u00a0 \u00a0 \"high\": 31.47,\r\n\u00a0 \u00a0 \u00a0 \"low\": 30.985,\r\n\u00a0 \u00a0 \u00a0 \"open\": 31.15,\r\n\u00a0 \u00a0 \u00a0 \"volume\": 5540312\r\n\u00a0 \u00a0 }\r\n\u00a0 },\u00a0\u00a0\u2026<\/pre>\n<p><span style=\"font-weight: 400\">2. Use o SQL++ para transformar a cole\u00e7\u00e3o <em>c1<\/em> na estrutura de dados da s\u00e9rie temporal e, em seguida, insira na cole\u00e7\u00e3o <em>c3:<\/em><\/span><\/p>\n<pre class=\"lang:js decode:true\">INSERT INTO ts.s1.c3 (KEY _k, VALUE _v)\r\nSELECT \"stock:XYZ:2013\" _k,\r\n{\"ticker\": a.Name ,\r\n\u00a0 \"ts_start\" : MIN(STR_TO_MILLIS(a.date)),\r\n\u00a0 \"ts_end\" : MAX(STR_TO_MILLIS(a.date)),\r\n\u00a0 \"ts_data\" : ARRAY_AGG([STR_TO_MILLIS(a.date), a.close]) } _v\u00a0\r\nFROM ts.s1.c1 a\r\nWHERE a.date BETWEEN \"2013-01-01\" AND \"2013-12-31\"\r\nGROUP BY a.Name;<\/pre>\n<p><span style=\"font-weight: 400\">O SQL++ executa uma <em>INSERT SELECT<\/em> e cria um \u00fanico documento com a estrutura necess\u00e1ria para o processamento de s\u00e9ries temporais do Couchbase. Observe que o <em>ts_data<\/em> cont\u00e9m todos os pontos de dados de pre\u00e7o de fechamento di\u00e1rio de 2013.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">3. Repita o INSERT\/SELECT para 2014 e 2015.<\/span><\/p>\n<pre class=\"lang:js decode:true\">[\r\n\u00a0 {\r\n\u00a0 \u00a0 \"id\": \"stock:XYZ:2013\",\r\n\u00a0 \u00a0 \"ticker\": \"XYZ\",\r\n\u00a0 \u00a0 \"ts_start\": 1387497600000,\r\n\u00a0 \u00a0 \"ts_end\": 1365465600000,\r\n\u00a0 \u00a0 \"ts_data\": [\r\n\u00a0 \u00a0 \u00a0 [ 1387497600000, 38.67 ],\r\n\u00a0 \u00a0 \u00a0 [ 1380585600000, 36.21 ],\r\n\u00a0 \u00a0 \u00a0 ...]\r\n\r\n\u00a0 },\r\n\u00a0 {\r\n\u00a0 \u00a0 \"id\": \"stock:XYZ:2014\",\r\n\u00a0 \u00a0 \"ticker\": \"XYZ\",\r\n\u00a0 \u00a0 \"ts_start\": 1413331200000,\r\n\u00a0 \u00a0 \"ts_end\": 1402444800000,\r\n\u00a0 \u00a0 \"ts_data\": [\r\n\u00a0 \u00a0 \u00a0 [ 1413331200000, 42.59 ],\r\n\u00a0 \u00a0 \u00a0 [ 1399507200000, 36.525],\r\n\u00a0 \u00a0 \u00a0 ...]\r\n\u00a0 },\r\n\u00a0 {\r\n\u00a0 \u00a0 \"id\": \"stock:XYZ:2015\",\r\n\u00a0 \u00a0 \"ticker\": \"XYZ\",\r\n\u00a0 \u00a0 \"ts_start\": 1444780800000,\r\n\u00a0 \u00a0 \"ts_end\": 1436313600000,\r\n\u00a0 \u00a0 \"ts_data\": [\r\n\u00a0 \u00a0 \u00a0 [ 1444780800000, 62.92 ],\r\n\u00a0 \u00a0 \u00a0 [ 1421280000000, 46.405],\r\n\u00a0 \u00a0 \u00a0 ...]\r\n\r\n\u00a0 }\r\n]<\/pre>\n<h3><span style=\"font-weight: 400\">Estrat\u00e9gias de ingest\u00e3o de dados<\/span><\/h3>\n<p><span style=\"font-weight: 400\">H\u00e1 v\u00e1rios cen\u00e1rios que voc\u00ea pode ter para o carregamento incremental de seus documentos JSON de s\u00e9rie temporal.<\/span><\/p>\n<ol>\n<li style=\"list-style-type: none\">\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Adi\u00e7\u00e3o de um intervalo de pontos de dados como um novo documento JSON - Para esse cen\u00e1rio, voc\u00ea pode usar o INSERT do SQL++ acima. Voc\u00ea s\u00f3 precisa garantir que os intervalos de pontos de dados n\u00e3o se sobreponham aos documentos existentes.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Adi\u00e7\u00e3o de um intervalo de pontos de dados ao <\/span><b>um documento JSON existente<\/b><span style=\"font-weight: 400\"> - Aqui voc\u00ea tem duas op\u00e7\u00f5es:<\/span>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Substitua o documento inteiro usando UPSERT\/SELECT como no INSERT\/SELECT<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Use o Couchbase SDK para anexar apenas os pontos de dados do novo item\u00a0<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<pre class=\"lang:js decode:true\">\/\/ Initialize the Couchbase cluster and bucket objects\r\nCluster cluster = CouchbaseCluster.create(\"&lt;cluster&gt;\");\r\nBucket bucket = cluster.openBucket(\"&lt;your_bucket&gt;\");\r\n\r\n\/\/ Specify the document ID and the sub-document path to update\r\nString docId = \"&lt;doc_id&gt;\";\u00a0 \/\/ eg. \"stock:XYZ:2015\"\r\nString path = \"a.ts_data[-1]\"; \/\/ -1 specifies the last element of the array\r\n\r\n\/\/ Create a JSON object representing the new array element to add\r\nJsonObject newElement = JsonObject.create()\r\n\u00a0 \u00a0 .put(\"0\", \"2015-12-31\")\r\n\u00a0 \u00a0 .put(\"1\", 300);\r\n\r\n\/\/ Use the sub-document API to update the array\r\nJsonDocument doc = bucket.get(docId);\r\nif (doc != null) {\r\n\u00a0 \u00a0 bucket.mutateIn(docId)\r\n\u00a0 \u00a0 \u00a0 \u00a0 .arrayAppend(path, newElement)\r\n\u00a0 \u00a0 \u00a0 \u00a0 .execute();\r\n}<\/pre>\n<h3><span style=\"font-weight: 400\">Consultar os dados da s\u00e9rie temporal<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Antes de consultar os dados, voc\u00ea deve criar um \u00edndice. Embora isso n\u00e3o seja absolutamente necess\u00e1rio, pois temos apenas alguns documentos, mesmo que cada documento consista no ano inteiro do pre\u00e7o di\u00e1rio das a\u00e7\u00f5es.\u00a0<\/span><\/p>\n<pre class=\"lang:default decode:true\">CREATE INDEX ix1 ON c3(ticker, ts_end, ts_start);<\/pre>\n<p><span style=\"font-weight: 400\">Em seguida, definimos o intervalo de dados no qual queremos que a consulta seja executada. Aqui, definimos uma matriz com dois elementos, o tempo de \u00e9poca inicial e final para 2013-01-01 e 2015-12-31.<\/span><\/p>\n<pre class=\"lang:default decode:true\">\\set -$ts_ranges [1682947800000,1685563200000];<\/pre>\n<h3><span style=\"font-weight: 400\">Visualizar os pontos de dados da s\u00e9rie temporal<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Use o <em>_timeseries<\/em> conforme descrito acima:<\/span><\/p>\n<pre class=\"lang:default decode:true\">SELECT t.* FROM c3 AS d\r\n\u00a0 UNNEST _timeseries(d, {\"ts_ranges\":$ts_ranges}) AS t\r\nWHERE d.ticker = 'XYZ' AND (d.ts_start &lt;= $ts_ranges[1] AND d.ts_end &gt;= $ts_ranges[0]);<\/pre>\n<p><b>Resultados:<\/b><\/p>\n<pre class=\"lang:js decode:true\">[\r\n\u00a0 { \"_t\": 1413331200000, \"_v0\": 42.59 },\r\n\u00a0 { \"_t\": 1399507200000, \"_v0\": 36.525},\r\n\u00a0 { \"_t\": 1392854400000, \"_v0\": 37.79 },\r\n\u00a0 { \"_t\": 1395100800000, \"_v0\": 39.82 },\r\n\u00a0 { \"_t\": 1410307200000, \"_v0\": 41.235},\u00a0\u00a0\u2026\u00a0\u00a0]<\/pre>\n<h3><span style=\"font-weight: 400\">Exibir os dados da s\u00e9rie temporal com a fun\u00e7\u00e3o Window do SQL++<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Agora que podemos acessar todo o conjunto de dados, podemos usar a fun\u00e7\u00e3o de janelas SQL++ do Couchbase para executar algumas fun\u00e7\u00f5es avan\u00e7adas de agrega\u00e7\u00e3o. Essa consulta retorna a m\u00e9dia di\u00e1ria da a\u00e7\u00e3o, bem como uma m\u00e9dia m\u00f3vel de 7 dias.<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td>\n<pre class=\"lang:default decode:true\">SELECT MILLIS_TO_TZ(day*86400000,\"UTC\") AS day, dayavg , AVG(dayavg) OVER (ORDER BY day ROWS 7 PRECEDING) AS sevendaymovavg\r\nFROM ts.s1.c3 AS d\r\nUNNEST _timeseries(d, {\"ts_ranges\":$ts_ranges}) AS t\r\nWHERE d.ticker = 'XYZ'\r\n\u00a0\u00a0\u00a0\u00a0  <span style=\"font-weight: 400\">\u00a0\u00a0AND (d.ts_start &lt;= $ts_ranges[<\/span><span style=\"font-weight: 400\">1<\/span><span style=\"font-weight: 400\">] AND d.ts_end &gt;= $ts_ranges[<\/span><span style=\"font-weight: 400\">0<\/span><span style=\"font-weight: 400\">])<\/span>\r\nGROUP BY IDIV(t._t,86400000) AS day\r\nLETTING dayavg = AVG(t._v0);<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Resultados:<\/strong><\/p>\n<pre class=\"lang:js decode:true\">[\r\n\u00a0 {\r\n\u00a0 \u00a0 \"day\": \"2014-01-02T00:00:00Z\",\r\n\u00a0 \u00a0 \"dayavg\": 39.12,\r\n\u00a0 \u00a0 \"sevendaymovavg\": 39.12\r\n\u00a0 },\r\n\u00a0 {\r\n\u00a0 \u00a0 \"day\": \"2014-01-03T00:00:00Z\",\r\n\u00a0 \u00a0 \"dayavg\": 39.015,\r\n\u00a0 \u00a0 \"sevendaymovavg\": 39.067499999999995\r\n\u00a0 },\r\n\u00a0 {\r\n\u00a0 \u00a0 \"day\": \"2014-01-06T00:00:00Z\",\r\n\u00a0 \u00a0 \"dayavg\": 38.715,\r\n\u00a0 \u00a0 \"sevendaymovavg\": 38.949999999999996\r\n\u00a0 },\r\n\u00a0 {\r\n\u00a0 \u00a0 \"day\": \"2014-01-07T00:00:00Z\",\r\n\u00a0 \u00a0 \"dayavg\": 38.745,\r\n\u00a0 \u00a0 \"sevendaymovavg\": 38.89875\r\n\u00a0 },\r\n\u00a0 {\r\n\u00a0 \u00a0 \"day\": \"2014-01-08T00:00:00Z\",\r\n\u00a0 \u00a0 \"dayavg\": 38.545,\r\n\u00a0 \u00a0 \"sevendaymovavg\": 38.827999999999996\r\n\u00a0 },\r\n\u00a0 ..\r\n]<\/pre>\n<h3><span style=\"font-weight: 400\">Usar gr\u00e1ficos do SQL++ em dados de s\u00e9ries temporais<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Neste exemplo, usamos o recurso Time Series do Couchbase e seu recurso de gr\u00e1ficos para rastrear uma estrat\u00e9gia de negocia\u00e7\u00e3o popular, rastreando as m\u00e9dias m\u00f3veis r\u00e1pidas (5 dias) em rela\u00e7\u00e3o \u00e0s m\u00e9dias m\u00f3veis lentas (30 dias).<\/span><\/p>\n<pre class=\"lang:default decode:true\">SELECT MILLIS_TO_TZ(day*86400000,\"UTC\") AS day, dayavg ,\r\nAVG(dayavg) OVER (ORDER BY day ROWS 5 PRECEDING) AS fma,\r\nAVG(dayavg) OVER (ORDER BY day ROWS 30 PRECEDING) AS sma\r\nFROM ts.s1.c3 AS d\r\nUNNEST _timeseries(d, {\"ts_ranges\":$ts_ranges}) AS t\r\nWHERE d.ticker = 'XYZ'\r\n<span style=\"font-weight: 400\">  AND (d.ts_start &lt;= $ts_ranges[<\/span><span style=\"font-weight: 400\">1<\/span><span style=\"font-weight: 400\">] AND d.ts_end &gt;= $ts_ranges[<\/span><span style=\"font-weight: 400\">0<\/span><span style=\"font-weight: 400\">])<\/span>\r\nGROUP BY IDIV(t._t,86400000) AS day\r\nLETTING dayavg = AVG(t._v0);<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14655\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/06\/image2-2-1024x904.png\" alt=\"\" width=\"900\" height=\"795\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/06\/image2-2-1024x904.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/06\/image2-2-300x265.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/06\/image2-2-768x678.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/06\/image2-2-1536x1355.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/06\/image2-2-1320x1165.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/06\/image2-2.png 1854w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<p><span style=\"font-weight: 400\">A ideia por tr\u00e1s dessa estrat\u00e9gia \u00e9 identificar quando a tend\u00eancia de curto prazo (FMA) est\u00e1 cruzando acima ou abaixo da de longo prazo (SMA). Quando a FMA cruza a SMA, \u00e9 considerado um sinal de compra e, inversamente, um sinal de venda quando a FMA cruza abaixo da SMA.<\/span><\/p>\n<h3><span style=\"font-weight: 400\">Usar a express\u00e3o de tabela comum do SQL++ com dados de s\u00e9rie temporal<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Essa an\u00e1lise calcula o \u00cdndice de For\u00e7a Relativa, ou seja, a velocidade e a varia\u00e7\u00e3o dos movimentos do pre\u00e7o das a\u00e7\u00f5es para identificar quando uma a\u00e7\u00e3o est\u00e1 sobrecomprada ou vendida. Um valor de RSI &gt; 70 pode indicar que a a\u00e7\u00e3o est\u00e1 sobrecomprada e deve ser corrigida. Por outro lado, quando o RSI \u00e9 &lt; 30, pode indicar que a a\u00e7\u00e3o est\u00e1 sobrevendida e deve se recuperar.<\/span><\/p>\n<pre class=\"lang:default decode:true\">WITH price_change AS (\r\nSELECT\u00a0 t._t as date,\r\n\u00a0 \u00a0 \u00a0 \u00a0 t._v0 AS price,\r\n\u00a0 \u00a0 \u00a0 \u00a0 LAG(t._v0, 1) OVER (ORDER BY t._t) AS prev_price,\r\n\u00a0 \u00a0 \u00a0 \u00a0 ROW_NUMBER() OVER (ORDER BY t._t) AS rn\r\nFROM ts.s1.c3 AS d\r\nUNNEST _timeseries(d, {\"ts_ranges\":$ts_ranges}) AS t\r\nWHERE d.ticker = 'XYZ'\r\n\u00a0 AND (\u00a0 $ts_ranges[0] BETWEEN d.ts_start AND d.ts_end\r\n\u00a0 \u00a0 \u00a0 OR (d.ts_start BETWEEN $ts_ranges[0] AND $ts_ranges[1] AND d.ts_end BETWEEN $ts_ranges[0] AND $ts_ranges[1] )\r\n\u00a0 \u00a0 \u00a0 OR $ts_ranges[1] BETWEEN d.ts_start AND d.ts_end\r\n\u00a0 \u00a0 \u00a0 )\r\n),\r\ngain_loss AS (\r\n\u00a0 SELECT pc.date, pc.price, pc.prev_price,\r\n\u00a0 \u00a0 \u00a0 \u00a0 CASE WHEN pc.price &gt; pc.prev_price THEN pc.price - pc.prev_price ELSE 0 END AS gain,\r\n\u00a0 \u00a0 \u00a0 \u00a0 CASE WHEN pc.price &lt; pc.prev_price THEN pc.prev_price - pc.price ELSE 0 END AS loss,\r\n\u00a0 \u00a0 \u00a0 \u00a0 pc.rn\r\n\u00a0 FROM price_change pc\r\n),\r\navg_gain_loss AS (\r\n\u00a0 SELECT gl.date,\r\n\u00a0 \u00a0 \u00a0 \u00a0 AVG(gl.gain) OVER (ORDER BY gl.rn ROWS BETWEEN 13 PRECEDING AND CURRENT ROW) AS avg_gain,\r\n\u00a0 \u00a0 \u00a0 \u00a0 AVG(gl.loss) OVER (ORDER BY gl.rn ROWS BETWEEN 13 PRECEDING AND CURRENT ROW) AS avg_loss,\r\n\u00a0 \u00a0 \u00a0 \u00a0 gl.rn\r\n\u00a0 FROM gain_loss gl\r\n),\r\nrsi AS (\r\n\u00a0 SELECT agl.date,\r\n\u00a0 \u00a0 \u00a0 \u00a0 100 - (100 \/ (1 + (agl.avg_gain \/ agl.avg_loss))) AS rsi_val\r\n\u00a0 FROM avg_gain_loss agl\r\n\u00a0 WHERE agl.rn &gt;= 14\r\n),\r\nbuy_sell_signals AS (\r\n\u00a0 SELECT rsi.date, rsi.rsi_val,\r\n\u00a0 \u00a0 \u00a0 \u00a0 CASE WHEN rsi.rsi_val &lt; 30 THEN 'buy'\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 WHEN rsi.rsi_val &gt; 70 THEN 'sell'\r\n\u00a0 \u00a0 \u00a0 \u00a0 END AS signal\r\n\u00a0 FROM rsi\r\n)\r\nSELECT * FROM buy_sell_signals bss WHERE bss.signal IS NOT NULL;<\/pre>\n<p><span style=\"font-weight: 400\"><strong>Resultados:<\/strong><\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td>\n<pre class=\"lang:default decode:true\">day \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 rsi_val \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 signal\r\n\"2014-01-22T00:00:00Z\" 11.147540983606476 \"buy\"\r\n\"2014-01-23T00:00:00Z\" 9.898107714701524 \u00a0 \u00a0 \u00a0 \"buy\"\r\n\"2014-01-24T00:00:00Z\" 8.785529715762195 \u00a0 \u00a0 \u00a0 \"buy\"\r\n\"2014-01-27T00:00:00Z\" 12.584573748308443 \"buy\"\r\n\"2014-01-28T00:00:00Z\" 20.638820638820576 \"buy\"\r\n\"2014-01-29T00:00:00Z\" 19.354838709677352 \"buy\"\r\n\"2014-02-24T00:00:00Z\" 90.84507042253534 \u00a0 \u00a0 \u00a0 \"sell\"\r\n\"2014-02-25T00:00:00Z\" 95.1306413301663 \u00a0 \u00a0 \u00a0 \"sell\"\r\n\"2014-02-26T00:00:00Z\" 95.25462962962968 \u00a0 \u00a0 \u00a0 \"sell\"\r\n\"2014-02-27T00:00:00Z\" 90.03690036900366 \u00a0 \u00a0 \u00a0 \"sell\"\r\n\"2014-02-28T00:00:00Z\" 88.79668049792528\u00a0 \"sell\"\r\n\"2014-03-03T00:00:00Z\" 79.06403940886698 \u00a0 \u00a0 \u00a0 \"sell\"\r\n\"2014-03-04T00:00:00Z\" 78.8557213930348\u00a0 \"sell\"\r\n\"2014-03-07T00:00:00Z\" 71.54072620215895 \"sell\"\r\n\"2014-03-26T00:00:00Z\" 26.635514018691566 \"buy\"\r\n\"2014-03-27T00:00:00Z\" 17.887029288702877 \"buy\"\r\n\"2014-03-28T00:00:00Z\" 20.75268817204305 \"buy\"\r\n\"2014-03-31T00:00:00Z\" 23.83474576271186 \"buy\"\r\n\"2014-04-01T00:00:00Z\" 26.632653061224502 \"buy\"\r\n\"2014-04-02T00:00:00Z\" 29.02208201892749 \"buy\"\r\n\"2014-04-03T00:00:00Z\" 28.020304568527948 \"buy\"\r\n\"2014-04-04T00:00:00Z\" 20.309477756286242 \"buy\"\r\n\"2014-04-07T00:00:00Z\" 12.318220701454209 \"buy\"\r\n\"2014-04-08T00:00:00Z\" 26.561324303987945 \"buy\"\r\n\"2014-04-09T00:00:00Z\" 29.326574945691576 \"buy\"<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2><span style=\"font-weight: 400\">Principais conclus\u00f5es<\/span><\/h2>\n<p><b>Armazenamento de dados <\/b><span style=\"font-weight: 400\">- O armazenamento geral de dados para a s\u00e9rie temporal do Couchbase depender\u00e1 de quantos pontos de dados voc\u00ea escolher\u00e1 para empacotar na matriz. Se a an\u00e1lise for feita por hora, dia ou m\u00eas, empacote os pontos de dados de acordo com o per\u00edodo. Observe que o armazenamento tamb\u00e9m pode ser reduzido ainda mais se for usada uma s\u00e9rie temporal regular em que o elemento de tempo na s\u00e9rie temporal possa ser derivado e, portanto, n\u00e3o exija o armazenamento do elemento de tempo da \u00e9poca.<\/span><\/p>\n<p><b>Elemento de dados e reten\u00e7\u00e3o de dados com TTL<\/b><span style=\"font-weight: 400\"> - O tamanho m\u00e1ximo do documento JSON no Couchbase \u00e9 de 20 MB. Embora isso possa significar que voc\u00ea pode empacotar um grande n\u00famero de pontos de dados na matriz de s\u00e9rie temporal, voc\u00ea tamb\u00e9m deve estar ciente de que a configura\u00e7\u00e3o Time To Live est\u00e1 no n\u00edvel do documento, e n\u00e3o no n\u00edvel do elemento da matriz.\u00a0<\/span><\/p>\n<p><b>Ingest\u00e3o de dados <\/b><span style=\"font-weight: 400\">- O aplicativo \u00e9 respons\u00e1vel pela estrat\u00e9gia de ingest\u00e3o de dados.  Como empacotar o ponto de dados da s\u00e9rie temporal nas matrizes e o tamanho da matriz. Isso significa que ele precisa decidir se vai anexar a um documento existente ou iniciar um novo.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Para saber mais, consulte o <\/span><a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/time-series.html\"><span style=\"font-weight: 400\">Documenta\u00e7\u00e3o de s\u00e9ries temporais do Couchbase<\/span><\/a><span style=\"font-weight: 400\">.<\/span><\/p>","protected":false},"excerpt":{"rendered":"<p>Couchbase is excited to announce the release of a new time-series feature as part of Couchbase 7.2. This feature is built on top of the robust Couchbase distributed database architecture, which is designed to scale horizontally as your data grows, [&hellip;]<\/p>","protected":false},"author":26326,"featured_media":14656,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816,1819],"tags":[1834,9602,9827],"ppma_author":[8919],"class_list":["post-14594","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server","category-data-modeling","tag-charts","tag-storage","tag-time-series"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Couchbase Time Series: Key Benefits + Use Case Examples<\/title>\n<meta name=\"description\" content=\"As your business grows and your time series data needs increase, Couchbase can effortlessly expand to meet those needs, making it an ideal solution.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/introducing-couchbase-time-series\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Introducing Couchbase Time Series\" \/>\n<meta property=\"og:description\" content=\"As your business grows and your time series data needs increase, Couchbase can effortlessly expand to meet those needs, making it an ideal solution.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/introducing-couchbase-time-series\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2023-07-26T19:16:39+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-02-07T19:56:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/06\/image1-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"907\" \/>\n\t<meta property=\"og:image:height\" content=\"428\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Binh Le\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Binh Le\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-time-series\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-time-series\/\"},\"author\":{\"name\":\"Binh Le\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/f89064928e262c71eb43bee996c48c63\"},\"headline\":\"Introducing Couchbase Time Series\",\"datePublished\":\"2023-07-26T19:16:39+00:00\",\"dateModified\":\"2024-02-07T19:56:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-time-series\/\"},\"wordCount\":1735,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-time-series\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/06\/image1-2.png\",\"keywords\":[\"charts\",\"storage\",\"time series\"],\"articleSection\":[\"Couchbase Server\",\"Data Modeling\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-time-series\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-time-series\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-time-series\/\",\"name\":\"Couchbase Time Series: Key Benefits + Use Case Examples\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-time-series\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-time-series\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/06\/image1-2.png\",\"datePublished\":\"2023-07-26T19:16:39+00:00\",\"dateModified\":\"2024-02-07T19:56:01+00:00\",\"description\":\"As your business grows and your time series data needs increase, Couchbase can effortlessly expand to meet those needs, making it an ideal solution.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-time-series\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-time-series\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-time-series\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/06\/image1-2.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/06\/image1-2.png\",\"width\":907,\"height\":428,\"caption\":\"Couchbase time series chart\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-time-series\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Introducing Couchbase Time Series\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/f89064928e262c71eb43bee996c48c63\",\"name\":\"Binh Le\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/5b68c37e30928a9d7b2c8470b1a303b7\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g\",\"caption\":\"Binh Le\"},\"description\":\"Binh Le is a Principal Product Manager for Couchbase Query service. Prior to Couchbase, he worked at Oracle and led the product management team for Sales Cloud Analytics and CRM OnDemand. Binh holds a Bachelor's Degree in Computer Science from the University of Brighton, UK.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/binh-le-2\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Couchbase Time Series: Key Benefits + Use Case Examples","description":"As your business grows and your time series data needs increase, Couchbase can effortlessly expand to meet those needs, making it an ideal solution.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/pt\/introducing-couchbase-time-series\/","og_locale":"pt_BR","og_type":"article","og_title":"Introducing Couchbase Time Series","og_description":"As your business grows and your time series data needs increase, Couchbase can effortlessly expand to meet those needs, making it an ideal solution.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/introducing-couchbase-time-series\/","og_site_name":"The Couchbase Blog","article_published_time":"2023-07-26T19:16:39+00:00","article_modified_time":"2024-02-07T19:56:01+00:00","og_image":[{"width":907,"height":428,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/06\/image1-2.png","type":"image\/png"}],"author":"Binh Le","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Binh Le","Est. reading time":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-time-series\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-time-series\/"},"author":{"name":"Binh Le","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/f89064928e262c71eb43bee996c48c63"},"headline":"Introducing Couchbase Time Series","datePublished":"2023-07-26T19:16:39+00:00","dateModified":"2024-02-07T19:56:01+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-time-series\/"},"wordCount":1735,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-time-series\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/06\/image1-2.png","keywords":["charts","storage","time series"],"articleSection":["Couchbase Server","Data Modeling"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/introducing-couchbase-time-series\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-time-series\/","url":"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-time-series\/","name":"Couchbase Time Series: Key Benefits + Use Case Examples","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-time-series\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-time-series\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/06\/image1-2.png","datePublished":"2023-07-26T19:16:39+00:00","dateModified":"2024-02-07T19:56:01+00:00","description":"As your business grows and your time series data needs increase, Couchbase can effortlessly expand to meet those needs, making it an ideal solution.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-time-series\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/introducing-couchbase-time-series\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-time-series\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/06\/image1-2.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/06\/image1-2.png","width":907,"height":428,"caption":"Couchbase time series chart"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-time-series\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Introducing Couchbase Time Series"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/f89064928e262c71eb43bee996c48c63","name":"Binh Le","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/5b68c37e30928a9d7b2c8470b1a303b7","url":"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g","caption":"Binh Le"},"description":"Binh Le \u00e9 gerente de produto principal do servi\u00e7o Couchbase Query. Antes da Couchbase, ele trabalhou na Oracle e liderou a equipe de gerenciamento de produtos para Sales Cloud Analytics e CRM OnDemand. Binh \u00e9 bacharel em Ci\u00eancia da Computa\u00e7\u00e3o pela Universidade de Brighton, no Reino Unido.","url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/binh-le-2\/"}]}},"authors":[{"term_id":8919,"user_id":26326,"is_guest":0,"slug":"binh-le-2","display_name":"Binh Le","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g","first_name":"Binh","last_name":"Le","user_url":"","author_category":"","description":"Binh Le \u00e9 gerente de produto principal do servi\u00e7o de consulta do Couchbase. Antes da Couchbase, ele trabalhou na Oracle e liderou a equipe de gerenciamento de produtos para Sales Clould Analytics e CRM OnDemand. Binh \u00e9 bacharel em Ci\u00eancia da Computa\u00e7\u00e3o pela Universidade de Brighton, no Reino Unido."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/14594","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/26326"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=14594"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/14594\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/14656"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=14594"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=14594"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=14594"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=14594"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}