Visualizzazione post con etichetta linux. Mostra tutti i post
Visualizzazione post con etichetta linux. Mostra tutti i post

martedì 25 luglio 2017

MongoDB, C and Bulk Operation


E' molto tempo che voglio provare ad eseguire delle operazione su MongoDB utilizzando il Linguaggio C. Sono tantissimi anni che non uso più il C (circa 18.. dai tempi dei CGI sulla WebSphere Commerce Suite di IBM).

Per prima cosa vediamo come installare sotto Debian/Ubuntu il driver con i relativi sorgenti.

apt-get install libmongoc-1.0-0

A questo punto inizio ad analizzare il funzionamento del driver, la documentazione è molto valida.

Il problema che voglio risolvere è un calcolo su un numero elevato di record. Per testing utilizzo il db del Meteo. Il calcolo prevede di prendere i dati presenti nell'archivio delle piogge (Field RC) che sono in realtà un numero incrementale azzerato ad ogni riavvio della console del meteo. Quindi oggi il contatore è 200, domani 200, dopodomani 201, quindi andando per differenza oggi è caduto 1 mm di pioggia.

La struttura dell'object su cui vengono eseguite le query di mongo è la seguente:


 I record sono circa 1 M.



per la compilazione del pacchetto basta eseguire il comando:


sudo gcc -o raindata raindata.c utils.c $(pkg-config --cflags --libs libmongoc-1.0)

 La cosa molto interessante è la funzionalità di Bulk insert molto simile alle transazione dei classici db relazioni. Ovvero si caricano tutti i dati in una struttura e poi si esegue una flush e tutti i dati vengo inseriti in modo molto veloce.

Non mi soffermo tanto sul calcolo del dato puro ma sulle performance di inserimento. 
La prima esecuzione è con insert ripetitive, la seconda con la funzionalità di bulk. 

Si passa da 8 minuti a 12 secondi!!



come sempre trovate tutto il sorgente sul github https://github.com/marcoberri/mbmeteomongoc

lunedì 19 ottobre 2015

MongoDB v.3 Memory Problem

Utilizzando un piccolo server (magari con più processi di mongod ) è possibile che per mancanza di risorse il processo venga killato dal SO.

Nel var/log/messages si trova questa cosa devastante...

Oct 15 02:00:33 <servername> kernel: [723954.577468] Out of memory: Kill process 18100 (mongod) score 368 or sacrifice child

la soluzione è semplicemente dosare correttamente la cache del wiredTiger nel file di configurazione


nel mio caso con un server (debian 8.1 con 16Gb di Ram) con 3 mongod in esecuzione in replica secondaria il parametro è settato a 3Gb per ogni mongod.

dopo una taratura i mongod non crollano più.



 





sabato 14 febbraio 2015

Raspberry Pi configurare due wifi dongle



Il primo dongle è un Tenda il secondo un piccolo Netgear, entrambi collegati alla stessa rete.


sudo apt-get purge ifplugd


file: /etc/network/interfaces
auto lo
iface lo inet loopback
iface eth0 inet dhcp


allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

allow-hotplug wlan1
iface wlan1 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
ifcae default inet dhcp





file: /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
ssid="Digicom_5B36"
psk="xxxxxxxxxxxxxx"
}







martedì 19 marzo 2013

Raspberry Pi - configurare - NetGear 150N - RTL8188CUS


Preso il Rapsberry PI direttamente da RS. Chiavetta USB WI-FI  - NetGear150N.

Configurato in dhcp sulla mia rete interna.

Inserire la chiavetta nel Raspberry,

lsusb e vedete se la chiavetta viene vista dal sistema

NetGear, Inc. WNA1000M 802.11bgn [Realtek RTL8188CUS]

le configurazioni di

/etc/network/interfaces


auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf


il file wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf


ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="xxxxx"
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP
psk="xxxxxxxxx"
}



riavviare e togliere il cavo di rete.



[via omer.me ]

lunedì 5 settembre 2011

Jetty - Hot Deploy e Reload

per eseguire un reload della singola app è necessario eseguire un

touch /etc/jetty/context/configurazione-webapp.xml


oppure inserire al volo una nuova conf.xml e jetty esegue l'Hot deploy senza bisogno del restart del service.




[grazie a Fabrizio]

venerdì 20 maggio 2011

linux - conteggio file via bash

conteggio dei file con la bash di linux in modo ricorsivo.


find . | wc -l

[via]

giovedì 21 aprile 2011

linux - Unrar file multipli

file-part1.rar
file-part2.rar
file-part3.rar


find -type f -name '*.rar' -exec unrar x {} \;

[via basic-linux.bauani.org]

mercoledì 30 marzo 2011

postgresql : eseguire una query da console

..mai che mi ricordo questo comodissimo comando da console

psql <nomedb> -c "select * from..." > file.txt

oppure
<nomedb> -c "update..."

martedì 8 marzo 2011

keypad disable on Ubuntu?

basta premere shift + Bloc Num per abilitare/disabilitare la tastiera

giovedì 16 dicembre 2010

Wget in Crontab con parametri

Come eseguire un wget con parametri all'interno del crontab di linux


30 14,23 * * 1-5  /usr/bin/wget --post-data "param1=pippo&param2=pluto&param3=paperino" http://www.nomesito.dominio/nomefile &1>/dev/null

venerdì 3 dicembre 2010

Linux HostName

si, l'host name della macchina è orrendo.

modificarlo da /etc/hostname

ricordarsi di aggiungerlo anche a /etc/hosts
127.0.0.1 <nome_inserito>

altrimenti apache e jetty danno in testa!!!

Java e NFS

da quello che trovo in rente java da un file system di lunix non riesce ad andare a scrivere con le procedure standard sue di java ( classe io.File quindi copy e rename e delete)  su file system di tipo NFS. Fortunatamente le commons.io di apache funzionano!!!!

org.apache.commons.io.FileUtils.copyFile(new File(fileStart),new File(fileDest));

mercoledì 17 novembre 2010

jetty - link simbolici

problemi con i link simbolici? per jetty bisogna abilitarli, sono disabilitati per motivi di sicurezza:

per abilitarli:

1 andare in <jett.home>/etc/webdefault.xml


<servlet>
...
    <init-param>
      <param-name>aliases</param-name>          
      <param-value>true</param-value>
    </init-param>
...
</servlet>

e verificare per tutti context: /<jetty.home>/etc/contexts/*

 <Set name="defaultsDescriptor"><SystemProperty name="jetty.home" default="."/>/etc/webdefault.xml</Set>

mercoledì 3 novembre 2010

Linux - problemi con la data dei file

alle volte la data dei file non risulta giusta per qualche motivo del tipo 01-01-1970 o qualcosa del genere.

usare il touch è la cosa migliore... ma per usarlo a cascata?

touch */*/*/*/*/*

eseguire il comando scalando gli /*

mercoledì 27 ottobre 2010

jetty - enable on localhost

/etc/default/jetty.conf

JETTY_HOST=0.0.0.0

ubuntu 10.4 - webmin

wget http://downloads.sourceforge.net/project/webadmin/webmin/1.520/webmin_1.520_all.deb

dpkg -i webmin_1.520_all.deb

apt-get install libapt-pkg-perl libnet-ssleay-perl libauthen-pam-perl libio-pty-perl apt-show-versions

ubuntu - ufw

//ssh
ufw allow from any|<ip> to any port 22

//http
ufw allow from any to any port 80

//webmin
ufw allow from any to any port 10000

//ftp
ufw allow from any to any port 21
ufw allow proto tcp from any to any port 12122:12199

//postgres in esterno
ufw allow from 192.168.157.61 to 192.168.157.62 port 5432
ufw allow from 192.168.157.62 to 192.168.157.61 port 5432

ufw logging on
ufw enable

martedì 26 ottobre 2010

postgres : performace

per la versione 8.4

modificiare /etc/postgres/xx/main/postgresql.conf


shared_buffers = 768MB  #questo parametro deve essere settato con attenzione
max_prepared_transactions = 768
work_mem = 12MB

fsync = on
wal_buffers = 512kB

enable_seqscan = off 

geqo_threshold = 3

per modificare gli shared buffers sotto linux:

seguire queste indicazioni


joe /etc/sysctl.conf

kernel.shmmax = 671088640
kernel.shmall = 671088640

net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216


poi reboot

ubuntu 10.4 - settare il locale giusto

per i problemi con il locale


il comando locale vi restituisce cose oscene... vi consiglio:

apt-get install language-support-en
apt-get install language-support-it
update-locale LANG=it_IT.UTF-8
reboot

linux - set time zone

dpkg-reconfigure tzdata