Database Architect / Java(...)
publicado por jac às 2013-05-13 17:05:36
Numa equipa de 12, esta será a pessoa que sabe como guardar coisas complicadas que deveriam estar em NoSQL numa base de dados relacional.
Forte em MySQL e Java, mas com conhecimentos de pelo menos mais uma linguagem (convém saber ler PHP para compreender uma parte do projecto importante; Python também dá jeito).
PostgreSQL e NoSQL são skills interessantes para esta pessoa ter.
As candidaturas para esta posição deverão ser enviadas para sapojobs@telecom.pt com CV e uma resposta ao seguinte desafio:
A tua missão, caso escolhas aceitá-la, é implementar um sistema que, utilizando a classe abstracta TheReceiver como base, receba uma quantidade absurda de DummyBeans, e persista os valores para uma tabela 'summarize_table' com as colunas
(id, sov), contendo para cada Id, a soma dos valores recebidos até ao momento.
Visto que vamos receber MUITAS mensagens, não é aconselhável fazer um insert por cada uma, talvez quando o valor para um determinado ID atingir um limite? E/Ou quando passar um determinado período de tempo?
Extras:
- Inserir valores é pesado, e era bom continuar a processar mensagens enquanto escrevermos na BD... como?
- Se houver mais do que um "processo" ligado à nossa fila de mensagens, cada mensagem só será entregue a um deles. Isto pode ser útil para escalar o serviço, certo?
- Se alguém matar o processo, seria bom que o mesmo gravasse tudo antes de terminar (assumindo que encerrava ordeiramente, falhas de electricidade não contam).
public abstract class TheReceiver {
public abstract void handleMessage(DummyBean message);
public void connect() {
//Very complicated connection logic here.
}
}
public class DummyBean {
private Integer id;
private Long value;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Long getValue() {
return value;
}
public void setValue(Long value) {
this.value = value;
}
}


