Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Peso de minusculas y mayusculas (https://www.clubdelphi.com/foros/showthread.php?t=93336)

Tcmn 07-08-2018 22:45:54

Peso de minusculas y mayusculas
 
Hola a todos. Fijense que estoy haciendo un sistema con Delphi 6 y firebird 2.1 que trabajara remotamente sobre internet. La base de datos estara en un servidor LINUX y las estaciones de trabajo se conectaran a distancia usando VPN, y obviamente hay que ahorrar lo mas posible en el trafico asi que he sido lo mas cuidadoso posible en todas mis consultas, incluso en algunas vistas muestro solo una parte de valor de los campos VARCHAR usando SUBSTRING. Sin embargo me pregunto si hay una diferencia en el peso de los paquetes que viajen por la red si las letras son mayusculas o minusculas. Por ejemplo en los reportes que son varios registros y en los que se incluyen nombre de cliente mando solo los primeros 30 caracteres del valor de dicho campo, pero al dueño del futuro sistema le gusta escribir todo en mayusculas pero hay ocasiones que puedo mostrar informacion en minusculas. Asi que mi duda es ¿hay una ventaja en velocidad el que envie los caracteres en minusculas (LOWER) cuando originalmente estan en mayusuculas en la base de datos? O realmente no hay ninguna ganancia en velocidad?

Agradezco de antemano su tiempo.

Casimiro Notevi 07-08-2018 22:50:18

Cada letra ocupa un byte, ya sea minúscula o mayúscula.
Y si usas unicode (utf-8) también será lo mismo para interpretar la misma letra en minúscula o mayúscula.

Tcmn 07-08-2018 22:59:02

Mil gracias creo que ya peco de querer ahorrar jajaja

Alex Mireles 08-08-2018 02:00:51

Aqui lo que juega son los PAQUETES de datos que se mandan por la red (LAN , WAN, MAN..etc). (Hablando de una red TCP/IP que es la mas comun).

Cada paquete de datos tiene un tamaño especifico de BYTES, y ahi mismo va inmerso el protocolo de comunicación, que es el que valida la entrega completa de los paquetes de datos al destinatario del otro punto de la red (El protocolo puede pedir el re-envio de ciertos paquetes si hubo perdida o latencia y eso.... tu no lo controlas). Aclarado lo anterior, si mandas mayúsculas o minúsculas no afecta porque el paquete de datos que viajara en la CAPA DE TRANSPORTE no discrimina si el paquete es chico o grande, finalmente serán muchos micro paquetes los que se envian a pesar de que mandes cadenas vacías o cadenas muy largas. Lo que debes de valorar es el tamaño del result set (conjunto de resultados de tu query) que viaja por la red.. Una practica recomendable es tener las tablas de catálogos y de poca transaccionalidad del lado del cliente, para eso puedes usar el objeto de ClientDataSet para optimizar los tiempos de consulta de datos de lado de cliente..

SALUDOS.
skype: alex-mireles

Tcmn 08-08-2018 02:04:37

Cita:

Empezado por Alex Mireles (Mensaje 527981)
Aqui lo que juega son los PAQUETES de datos que se mandan por la red (LAN , WAN, MAN..etc). (Hablando de una red TCP/IP que es la mas comun).

Cada paquete de datos tiene un tamaño especifico de BYTES, y ahi mismo va inmerso el protocolo de comunicación, que es el que valida la entrega completa de los paquetes de datos al destinatario del otro punto de la red (El protocolo puede pedir el re-envio de ciertos paquetes si hubo perdida o latencia y eso.... tu no lo controlas). Aclarado lo anterior, si mandas mayúsculas o minúsculas no afecta porque el paquete de datos que viajara en la CAPA DE TRANSPORTE no discrimina si el paquete es chico o grande, finalmente serán muchos micro paquetes los que se envian a pesar de que mandes cadenas vacías o cadenas muy largas. Lo que debes de valorar es el tamaño del result set (conjunto de resultados de tu query) que viaja por la red.. Una practica recomendable es tener las tablas de catálogos y de poca transaccionalidad del lado del cliente, para eso puedes usar el objeto de ClientDataSet para optimizar los tiempos de consulta de datos de lado de cliente..

SALUDOS.
skype: alex-mireles

Buen consejo y explicacion. Gracias muchas

mamcx 08-08-2018 16:37:34

Cita:

Empezado por Casimiro Notevi (Mensaje 527974)
Y si usas unicode (utf-8) también será lo mismo para interpretar la misma letra en minúscula o mayúscula.

No exactamente:

https://www.joelonsoftware.com/2003/...ts-no-excuses/

UTF-8 es un encoding *variable* que puede ser de 1 a 6 bytes. Solo que los caracteres de ASCII son siempre en 1 y los mas complejos van creciendo hasta 6, solo cuando es necesario. Lo que significa que es muy eficiente!.

---

Si abres el mapa de caracteres en windows/osx/linux veras que las letras realmente son numeros en una tabla.

Cita:

a= 97
A = 65
Lo que vemos como letras, son realmente fuentes. Fuentes son *imagenes*.

Por la red o en disco SOLO VIAJAN BITS. Es todo. Todo lo demas es como se hace el encoding/decoding.

Si quieres hacer un encoding muy pequeño, aplicas tecnicas de *compresion*.

Asi, que lo mas simple y facil NO ES micro-optimizar tu BD. Tu BD debe ser *semanticamente correcta*. Guarda string en strings, dates en dates (no como algunos animales que guardan dates en strings!), ints en ints y asi sucesivamente. El deber de un RDBMS es la *integridad de datos*. Asi que deja a tu BD tranquila, que ademas cualquier motor moderno es una bestia de eficiencia.

Por lo tanto, solo tienes que "preocuparte" en reducir el tamaño de los paquetes EN TRANSITO. Select solo de las columnas necesarias, filtrar/preprocesar resultados (para eso es SQL).

De aqui, aplica un modelo de compresion a tus paquetes (como gzip) y ya. Hay mas que se puede hacer pero entonces se pone esoterica la cosa, y es poco probable que lo necesites.

Casimiro Notevi 08-08-2018 18:18:35

Cita:

Empezado por mamcx (Mensaje 527990)
No exactamente:

No seas tan quisquilloso :p
Una a ocupará lo mismo que una A.
Una b ocupará lo mismo que una B.
En el resto de cosas que dices, por supuesto, estoy de acuerdo :)

Tcmn 09-08-2018 18:04:20

Muchas gracias por información e interés macmx y Casimiro

ElDioni 10-08-2018 10:48:26

Cita:

Empezado por Casimiro Notevi (Mensaje 527993)
No seas tan quisquilloso :p
Una a ocupará lo mismo que una A.
Una b ocupará lo mismo que una B.
En el resto de cosas que dices, por supuesto, estoy de acuerdo :)




Un vaso es un vaso y un plato es un plato (Rajoy dixit)


Saludos.


La franja horaria es GMT +2. Ahora son las 01:32:11.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi