Rendimiento en Tryton
Rendimiento en Tryton
1/Programación
1.1/Operaciones en batch: create()
● Listas de registros:
@classmethoddef create(cls, vlist):
pass
1.2/Operaciones en batch: create()
parties = []
for x in xrange(1000): party = Party() Party.code = random()
Party.create([x._save_values for x in parties])
o
Party.save(parties)
1.3/Operaciones en batch: save()
for party in parties:party.code = random()party.save()
for party in parties:party.code = random()
Party.save(parties)
1.4/Cache
● Pre-carga de 2000 registros (configurable)● Anti-patrón: acceso aleatorio a los datos cargados
mediante search/browse
Party = Pool().get('party.party')parties = Party.search([])for party in parties:
for address in party.addresses:pass
1.4/Adjuntos
● Problema con python a nivel de comunicación. Introducido workaround en Tryton. Muy lento para ficheros de algunos MB
● Se guardan en el sistema de ficheros
1.5/Campos funcionales
● Trabajar en batch si no se puede hacer uso de la cache:
@classmethoddef get_value(cls, names, records):
pass
def get_value(self):pass
2/Procesos
2.1/Múltiples procesos
● Reverse proxy con NGINX o bien WSGI a partir de la 4.0● Cron integrado: lanzado en un proceso independiente del
que recibe las peticiones RPC● celery_tryton● Jasper server
3/PostgreSQL
3.1/PostgreSQL
● MVCC● Isolation Level: Repeatable read – No serializable● Actualizar versiones: 9.4 vs 9.5 24s vs 18→
3.2/Fichero de configuración
● Fichero de configuración● shared_buffers● work_mem● maintenance_work_mem● asynchronous_commit● fsync ¡¡On!!→● ¿¿ huge_pages ??
4/Sistema
4.1/Soft & hard
● PyPy vs cPython● Pyhon no libera memoria una vez consumida● Un proceso python podemos esperar que consuma entre
400MB y 1GB – si excede debería ser un problema● SSD está muy bien, ¿lo necesitas?
5/Futuro
● PosgreSQL 9.6 – varios procesos para ejecutar una consulta – excelente escalabilidad hasta 4 procesos
● Mecanismo estándar para guardar binarios en el sistema de ficheros
● Desaparición de los Properties● ¿Ejecución asíncrona de consultas SQL?● ¿Utilizar C en python-sql?● Mejorar gestión de las jerarquías – Adjancency list
5.1/Futuro
http://www.NaN-tic.com
Albert Cervera i [email protected]@albertnanlinkedin.com/in/albertca