Monday, August 08, 2016

Paper about Informix features for IoT / Estudo sobre as qualidades do Informix para IoT

An analyst research by Bloor about Informix and IoT (original version here: http://informix-technology.blogspot.com/2016/08/paper-about-informix-features-for-iot.html )



English version
Analyst firm Bloor Reasearch has published a white paper about IBM Informix and the Internet of Things. The paper is not a detailed technical overview of Informix, but instead it analyzes current IoT architectures and explains how Informix characteristics fit into different scenarios.
It highlights several Informix functionalities like:

  • Ability to run in many different environments and platforms
  • Embedability
  • TimeSeries and Geo-Spatial data
  • JSON/NoSQL support
  • Analytic features like Informix Warehouse Accelerator
  • Cloud deployment
  • Multi-tenancy support
It concludes Informix is well suited for IoT environments either in data collecting points, in the middle or in the center (for three tiered architectures)
The paper can be accessed here: http://www-01.ibm.com/common/ssi/cgi-bin/ssialias?htmlfid=IML14542USEN

Versão Portuguesa
A fima de analistas Bloor Reasearch publicou um estudo intitulado "IBM Informix and the Internet of Things". O documento não detalha tecnicamente o Informix, mas antes apresenta algumas arquiteturas atuais para IoT (Internet of Things) e explica como as características do Informix se adaptam a vários cenários.
Salienta várias funcionalidades do Informix, tais como:
  • Possibilidade de correr em vários ambientes e plataformas
  • Capacidade de ser embebido em soluções
  • Dados TimeSeries e Geo-Spatia
  • Suporte a JSON/NoSQL
  • Funcionalidades analíticas como o Informix Warehouse Accelerator
  • Utilização em Cloud
  • Suporte a multi-tenancy
Concluí que o Informix está bem adaptado  a ambientes IoT, seja em pontos de recolha de dados, pontos intermédios ou no centro das soluções (para arquiteturas de três níveis)
O estudo pode ser consultado em:  http://www-01.ibm.com/common/ssi/cgi-bin/ssialias?htmlfid=IML14542USEN

Thursday, August 04, 2016

CiscoLive names Informix best IoT database / Informix nomeado a melhor BD para IoT pela Cisco

Cisco recognizes the value and quality of Informix (original version here: http://informix-technology.blogspot.com/2016/08/ciscolive-names-informix-best-iot.html )



English version
During the annual meeting hosted by Cisco, CiscoLive, IBM Informix has won the award for bet IoT (Internet of Things) database.
This acknowledgement is a nice prize for all the features related to IoT that IBM has been adding to Informix. IBM and Cisco are long term partners and Informix is own of the success stories in this partnership. As it's widely known Cisco uses Informix inside some of their equipments like voice routers.
Unfortunately there aren't many evidences of this award, apart a pic on twitter shared by one IBMer:

CiscoLive award for IBM Informix as Best IoT Database


Versão Portuguesa
Durante o evento anual, CiscoLive, organizado pela Cisco, o Informix ganhou o prémio de melhor base de dados para IoT (Internet of Things).
Este reconhecimento é um bom prémio por todas as funcionalidades relacionadas com IoT que a IBM tem vindo a adicionar ao Informix.A IBM e a Cisco mantêm uma parceria de longo prazo e o Informix é um dos seus casos de sucesso. Como é sobejamente sabido a Cisco utiliza informix dentro de algum do seu equipamento como os routers de voz.Infelizmente não há muitas evidências deste prémio, com exceção de uma imagem  no Twitter partilhada por uma IBMer:

Prémio para melhor BD de IoT ganho pelo Informix na conferência CiscoLive

Wednesday, August 03, 2016

Informix 12.10.xC7W1

A new PID (Post Interim Drop) for Informix (original version here: http://informix-technology.blogspot.com/2016/08/informix-1210xc7w1.html)


English version
Just a couple of weeks after the regular fixpack 12.10.xC7 IBM launches 12.10.xC7W1. The "W"s are cumulative releases (W2 contains everything W1 contains). They typically come out when there's a strong reason for it, like:

  1. Serious security or functional issue discovered in previous releases and it's yet to early to release the next fixpack
  2. When there are a considerable number of customers asking for specific patches on top of previous fixpack
  3. As part of a more frequent release plan (put the features out as soon as we have them)
 Non-officially, it was suggested this release was triggered by some Cognos (IBM BI software) requests as Informix is the embedded database for it.  But it was also suggested that we could expect more frequent PIDs in the future.

In any case some customers were concerned that a release of a PID so close to the fixpack release date could imply the fixpack (12.10.xC7) had serious issues. That doesn't seem to be the case, and no alert/flash was released.
For the customers that were in the process of planning upgrades to 12.10.xC7 they could consider using 12.10.xC7W1 instead. If you already moved, there seems to be no reason to redo the upgrade process.
12.10.xC7W1 naturally contains some more fixes (that were not ready for 12.10.xC7) and a couple of features that will be made public in 12.10.xC8.


Versão Portuguesa
Apenas um par de semanas depois do fixpack regular 12.10.xC7 a IBM lança a 12.10.xC7W1. Os "W"s são versões cumulativas (W2 contém tudo o que a W1 contém). São lançadas tipicamente quando existe uma razão forte para isso, tais como:
  1. Problemas funcionais ou de segurança fortes descobertos na versão anterior, e quando ainda é muito cedo para lançar o próximo fixpack
  2. Quando há um número considerável de clientes a pedir patches específicos sobre o fixpack anterior
  3. Como veículo de um plano de releases com maior frequência de versões (disponibilizar as funcionalidades assim que as temos)
Não oficialmente foi sugerido que este PID derivou de necessidades do Cognos (software de BI da IBM), visto que o Informix serve de repositório ao Cognos. Mas foi também sugerido que no futuro poderemos ver estes PIDs com mais frequência

Em todo o caso, alguns clientes manifestaram preocupação com a disponibilização de um PID tão em cima da disponibilização de um fixplck regular, pois isso poderia indicar problemas sérios no fixpack 12.10.xC7. Não aparenta ser esse o caso e não foi efetuado nenhum alert/flash relativo ao Informix.

Para clientes que estavam no processo de migração para a 12.10.xC7, poderiam considerar utilizar a 12.10.xC7W1. Se já efetuou o upgrade para a 12.10.xC7 não parece haver motivo imperativo que leve a mudar para a 12.10.xC7. A 12.10.xC7W1 naturalmente contém mais correções (que não estavam prontos na data da 12.10.xC7 e um ar de funcionalidades que será tornada pública quando sair a 12.10.xC8.

Thursday, July 28, 2016

Informix 12.10.xC7

A description of the new features introduced in Informix fixpack 12.10.xC7 (original version here: http://informix-technology.blogspot.com/2016/06/informix-1210xc7.html)


English version
And another fixpack has come out. Informix 12.10.xC7 has been available to customers for around  two weeks. The documentation is available in the Knowledge Center.

The new fixpack will not be known as the greatest ever. The list of features is not long, and more important is highly dedicated to the new features we've been seeing in the latest releases. Things like JSON, Spatial temporal and Timeseries have been the main focus of the enhancements. I'd call this essentially a stability and IoT release. However, not all new features were documented (more on this later). Let's dig into the list:

  • Application development
    • COALESCE function
      This is the only "regular SQL" enhancement. The COALESCE() function accepts an undetermined number of arguments and returns the first non NULL value. It's a sort of glorified NVL(). This is important for compatibility with other vendors, specially considering this would not be possible to implement in a custom function (considering the unknown number and type of the arguments)
  • JSON compatibility
    • Update BSON arrays in an SQL statement
      New MongoDB operators were added to the list of possibilities in the BSON_UPDATE() function: $addToSet, $pop, $pullAll, and $push, plus the array update operator modifiers $each, $position, $slice, and $sort
    • JSON compatibility enhancements
      Several improvements in the JSON handling and MongoDB compatibility:
      • The behavior of the wire listener was changed. Now it send the updates to the database server first. Before the updates were run on the listener
      • We can now use bind variables in SQL statements sent through the wire listener
      • Even if the SQL statements feature is disabled we can activate the execution of procedures and functions. This allows greater control and security without allowing generic SQL execution
      • The transaction command can be used to execute several statements as a single transaction.
      • Compatibility with MongoDB shell version 3.2
      • GridFS functionality (available in the MongoDB drivers) can be used with Informix. This functionality was introduced as a way to sotre files in MongoDB that exceed the 16MB limit of MongoDB objects (note that Informix limit is 2GB).
        This splits the file into smaller chunks and stores the chunks in one collection and the metadata of the file in another collection
      • You can now use the MongoDB aggregation framework pipeline to aggregate time series data or return the time series element in a time range.
    • Load JSON documents with the MQTT protocol
      The MQTT protocol is an ISO lightweight protocol defined to allow sensors and other endpoint devices to send data to repositories or message brokers. Now Informix wire listener can be configured as an MQTT protocol receiver so that data can be sent to the database without further programming
    • Quickly add or remove shard servers with consistent hashing
      A new sharding method, "chash" or consistent hashing allows a member to be added or removed to a sharded object (table or collection) without having to redistribute all the data (only part has to be distributed)
  • Spatiotemporal searching
    • Improved spatiotemporal searching
      There are many improvements in this area. They are very specific and the description requires knowledge of what spatioltemporal data is and how it works. One highlight is the fact that the distance measures now are done in a spherical model and not the old Cartesian one. This was previously done for the spatial datablade and is very important considering the old method would introduce significant errors in the calculations (specially for longer distances and some parts of the globe)
  • Time series
    • Trigger spatiotemporal indexing while loading time series data
      New option allows us to require the indexing of spatiotemporal data when TimeSeries loaded data is written to disk
    • Improved pattern match searching
      TimeSeries pattern matching on BSON documents for numeric data and TimeSeries sub-type
    • Limit future data for rolling window containers
      We can define how many partitions "in the future" can be added. This may avoid that some application or user mistakes delete valid (old) data partitions
    • Enhancements for hertz data
      Removal of some limitations. Hertz (sub-second) data can be inserted after more recent data (out of chronological order), although within a second the order must be respected. And this type of data can now use rolling window containers
    • Longer fragmentation schemes for time series virtual tables
      I have troubles understanding this feature... Apparently the statement for a virtual table creation on top of a timeseries structure could result in an SQL statement that exceeds the maximum size of an SQL statement. So two flags were created to shorten the statement, depending on the scheme used in the base table. What puzzles me is that the SQL statement size was hugely increased in some recent versions
  • Spatial data
    • Convert spatial data to GeoJSON format
      A new function, SE_AsBSON() can be used to convert spatial data into the Geo/JSON format for applications that handle preferably JSON formatted data  
Now... about the non-documented features... Actually this fixpack introduces two important changes that were not (initially at least) documented:
  • The Informix Warehouse Accelerator (the in-memory database add-on that works together with Informix) can now be installed on Linux running on Power8 processors running in Little Endian mode.After several years since it's introduction when we told customers that this component had been designed for Intel processors IBM changes the game. This doesn't mean that what was told to customers was not true... The product really required a special type of instructions called SMD (Single introduction Multiple Data) that were present on Intel processors. Actually these were also present in Power processors, but the programming needed to be adapted to really take advantage of them since the use of these instructions really depends on the data layout in memory. IBM decided to do it now eventually taking advantage that with the Little Endian mode the data layouts will be equal on both platforms. And on the IIUG conference Sandor Szabo made a presentation comparing the product performance in both technologies with a clear advantage for Power. Naturally with anything related to CPUs, we already know it's a leap frog game. Anyway, now customers have a choice for the platform where they'll run the IWA component and this is specially relevant for IBM since it has sold it's x86 line of servers to Lenovo a few years ago.
  • The second feature is "small" but may be very relevant. We introduced the ability to create foreign key constraints with the NOVALIDATE option a few fixpacks ago. Now this was extended to the check constraints. Besides the typical scenario of export/import the other very useful use case for this is when we need to attach a table as a new partition of an existing and already partitioned table. By default Informix will validate that the data in the table validates the expression used for partitioning. This can consume a significant amount of time during the attach, which is clearly undesirable. The workaround was to create a check constraint matching the expression. Informix is smart enough to understand the data is ok, because we have the check constraint. This would consume time, but it could be done prior to the attach during data preparation. Now the constraint can be created with the NOVALIDATE option and that means much faster operations.


Versão Portuguesa
E saiu outro fixpack do Informix, 12.10.xC7. Está disponível para os clientes há cerca de duas semanas. A documentação está acessível no  Knowledge Center.

Este novo fixpack não ficará conhecido como o maior de sempre. A lista de novidades não é longa e mais importante que isso é altamente dedicada às novas áreas que temos visto nas últimas versões. Áreas como JSON, espaço temporal, timeseries têm sido o principal foco das melhorias. Chamar-lhe-ia essencialmente uma versão de estabilidade e dedicada à IoT. Em todo o caso nem todas as novidades foram documentadas (mais sobre isto adiante). Analisemos então a lista:
  • Desenvolvimento de aplicações
    • Função COALESCE
      Esta é a única melhoria do "SQL normal". A função COALESCE() aceita um número indeterminado de argumentos e retorna o primeiro valor não NULO. Como se fosse uma versão glorificada do NVL(). É importante para compatibilidade com outros fornecedores, especialmente porque devido ao número e tipo indeterminado de argumentos, isto não era algo fácil de implementar como uma função desenvolvida pelos utilizadores
  • Compatibilidade JSON
    • Update arrays BSON em instruções SQL
      Novos operadores MongoDB foram adicionados à liste de possibilidades da função BSON_UPDATE(): $addToSet, $pop, $pullAll, e $push, mais os modificadores de operadores  em update array $each, $position, $slice, e $sort
    • Melhorias de compatibilidade JSON
      Várias melhorias na manipulação de JSON e melhor compatibilidade com MongoDB
      • O comportamento do wire listenert foi modificado. Agora envia os updates para a base de dados como primeira opção. Antes os updates eram feitos pelo listener
      • Possibilidade de usar bind variables em instruções SQL enviadas através do wire listener
      • Mesmo que a funcionalidade de envio de SQL esteja desativada é possível ativar a execução de procedimentos e funções. Isto permite maior controlo e segurança por não deixar enviar SQL genérico
      • O comando de transação pode ser usado para executar várias instruções dentro da mesma transação
      • Compatibilidade com a versão 3.2 do MongoDB shell
      • A funcionalidade GridFS (disponível nos drivers MongoDB) pode agora ser usada com Informix. Esta funcionalidade foi introduzida como uma forma de guardar ficheiros no MongoDB que ultrapassassem os 16MB de limite dos objectos em  MongoDB. (note-se que em Informix o limite é de 2GB)
        A funcionalidade parte o ficheiro em pedações mais pequenos e guarda-os numa collection e a metadata sobre os mesmos noutra collection.
      • Possibilidade de utilização da pipeline da framework de agregação do MongoDB para agregar dados TimeSeries ou retornar os elementos TimeSeries num intervalo de tempo
    • Carregar documentos JSON com o protocolo MQTT
      O protocolo MQTT é um protocolo "leve" definido pelo comité ISO para sensores e outros dispositivos terminais, com o objetivo de enviar dados para repositórios de dados ou gestores de mensagens.
      Agora o wire listener do Informix pode ser configurado como um receptor do protocolo MQTT, de forma a que os dados possam ser-lhe enviados sem qualquer programação
    • Adição e remoção rápida de servidores shard com consistent hashing
      Um novo método de sharding, "chash" ou hashing  consistente permite que um membro seja adicionado ou removido a um objeto (tabela ou collection) sem que se tenha de redistribuir todos os dados (apenas uma parte será redistribuída)
  • Pesquisa Spatiotemporal
    • Melhorias na pesquisa spatiotemporal
      Existem muitas novidades nesta área. São muito específicas e a explicação requer um bom entendimento do que são dados spatiotemporal e como funcionam. Um ponto em destaque é o facto de as medidas de distâncias passarem a ser feitas no modelo "esférico" e não no antigo cartesiano. Isto foi introduzido anteriormente no spatial datablade e é muito importante considerando que o método antigo introduzia erros consideráveis nestes cálculos (em particular para distâncias mais longas e certas regiões do globo terrestre)
  • Timeseries
    • Despoletar indexação spatiotemporal durante o carregamento de dados timeseries
      Uma nova opção permite-nos requerer a indexação spatiotemporal enquanto os dados TimeSeries são carregados e escritos em disco
    • Melhoria na pesquisa  pattern match
      TimeSeries "pattern matching" em documentos BSON para dados numéricos e sub-tipo TimeSeries
    • Limite para dados futuros em rolling window containers
      Podemos definir quantas "partições" "no futuro" podem ser adicionadas. Isto pode evitar que alguma aplicação ou utilizador possa, por erro, apagar partições antigas que sejam ainda válidas
    • Melhoria para dados "hertzianos"
      Remoção de algumas limitações. Dados "hertzianos" (sub-segundo) podem ser inseridos após dados mais recentes (fora da ordem cronológica), embora dentro de um mesmo segundo a ordem tenha de ser respeitada. Este tipo de dados pode agora ser também usar rolling window containers
    • Esquemas de fragmentação mais longos para tabelas virtuais sobre timeseries
      Confesso que tenho alguns problemas em entender esta funcionalidade... Aparentemente a instrução para criação de uma tabela virtual sobre uma estrutura timeseries poderia resultar numa instrução que excedesse o limite de tamanho de uma instrução SQL. Para o evitar foram criadas duas flags que permitem encurtar a instrução, dependendo do esquema de fragmentação existente na tabela base. O que me intriga é que o tamanho de uma instrução SQL foi enormemente aumentado em versões recentes, pelo que me parece impensável à partida que pudesse ser atingido
  • Dados Spatial
    • Conversão de dados spatial para formato GeoJSON
      Uma nova função, SE_AsBSON() pode ser usada para converter dados spatial para o formato GeoJSON em aplicações que prefiram lidar com este formato

Agora... sobre as funcionalidades não documentadas.... Na verdade, este fixpack introduz duas mudanças importantes que não foram (inicialmente pelo menos) documentadas:
  • O Informix Warehouse Accelerator (o componente de base de dados em memória que trabalha em conjunto com o Informix) pode agora ser instalado em Linux a correr em processadores Power8 configurados no modo de Little Endian. Após vários anos desde a introdução do produto em que foi dito aos clientes que o mesmo tinha sido desenhado para processadores Intel a IBM decidiu mudar o "jogo". Isto não quer dizer que o que foi dito aos clientes não fosse verdade... O produto realmente necessita um tipo especial de instruções no CPU, chamadas SMD (Single instruction Multiple Data) que existe nos processadores Intel. Mas na verdade os processadores Power também têm o mesmo tipo de instruções, mas a programação tinha de ser alterada / reoptimizada (este tipo de instruções depende da disposição de dados em memória). E a IBM decidiu fazê-lo agora, porventura tirando partido de as diferenças em modo Little Endian serem menores. Na conferência do IIUG o Sandor Szabo efetuou uma apresentação que compreendia uma comparação do produto em ambas as plataformas com vantagem clara para a arquitetura Power. Naturalmente com tudo o que está relacionado com CPUs, todos sabemos que se trata de "saltos de rã", ou seja, uma futura geração de processadores Intel pode reverter estas observações ou minimizar as diferenças.
    De qualquer forma os clientes agora têm duas opções para executar o IWA, sendo isto relevante para a IBM visto que vendeu a sua linha de servidores Intel à Lenovo há uns anos atrás
  • A segunda funcionalidade parece pequena mas é relevante. Introduzimos a possibilidade de criar constraints do tipo chave estrangeira com a opção de NOVALIDATE há uns fixpacks atrás. Agora a opção foi estendida às check constraints. Para além do cenário óbvio de exportação/importação de dados a outra situação em que isto pode ser muito útil é quando queremos adicionar uma tabela como uma nova partição a uma tabela já existente e já particionada. Por omissão o Informix vai validar que os dados existentes na tabela que será o novo fragmento verificam a expressão de particionamento utilizada. Isto pode consumir muito tempo e é feito durante o attach o que é claramente indesejável. A forma de contornar isto seria criar uma check constraint com a mesma condição de particionamento usada na nova partição. O Informix é suficientemente esperto para perceber que se existe uma constraint não tem de voltar a fazer a validação. Ainda assim demorava-se tempo ainda que durante a fase de preparação dos dados. Agora com a possibilidade de criar as check constraints com a cláusula NOVALIDATE poupa-se esse tempo, tornando este tipo de operação muito mais rápido