El director de tecnología, Randy Merilatt, analiza los entresijos de RDM Embedded 10.0. Como uno de los desarrolladores originales del proyecto, Randy habla sobre las nuevas funciones básicas de la API, la adición de SQL de RDMe y más.
Antes de asumir completamente el rol de CTO, todavía estoy en el proceso de cumplir con mis responsabilidades finales como desarrollador principal del nuevo SQL para RDM integrado (RDMe). En este artículo de blog, quiero relatar algunas de las experiencias que he tenido como ingeniero de software que usa RDMe. Ahora bien, no soy lo que uno consideraría un usuario objetivo. Soy descaradamente parcial. Además, soy un experto en el uso de RDMe. Después de todo, fui uno de los desarrolladores originales del producto. Sin embargo, no he tenido participación de ingeniería en su desarrollo durante muchos años y ahora soy un usuario del producto del esfuerzo de ingeniería de otros. Entonces, lo que voy a compartir es cierto y no exagero.
SQL es esencialmente un programa de aplicación RDMe. Si bien hemos agregado algunas funciones API centrales nuevas al tiempo de ejecución de RDMe para satisfacer las necesidades de SQL, esas nuevas funciones estarán disponibles para todos los usuarios, de modo que no haya nada que SQL utilice de RDMe que no esté disponible para todos. Dado que, en el momento de escribir este artículo, SQL todavía está en desarrollo, debo afirmar que mi uso de RDMe ha sido principalmente en modo de prueba y depuración. Sin embargo, eso no quiere decir que no haya habido un uso intensivo de RDMe, ya que una de las bases de datos de ejemplo a las que se hace referencia en la nueva Guía del usuario de SQL contiene varias tablas (tipos de registros), cada una de las cuales contiene más de 100,000 filas (registros de ocurrencias). Para darle una idea de la amplitud del uso del tiempo de ejecución de RDMe, la tabla al final de este artículo muestra todas las funciones principales de la API que se utilizan en SQL. SQL también utiliza muchas de las funciones RDMe PSP (Platform Support Package).
La versión de RDMe que se utiliza es la nueva versión que se lanzará con SQL. Está basado en RDMe 10.0. He realizado mis pruebas usando uno o más (al probar uniones de bases de datos) Servidores de archivos transaccionales (TFS) RDMe que se ejecutan como procesos separados en mi computadora con Windows 7 de cuatro núcleos. En todas las pruebas que he realizado hasta ahora, he encontrado muchos errores en mi propio código (nuevo), pero he encontrado muy pocos errores en el tiempo de ejecución de RDMe. De hecho, los únicos errores que he encontrado han sido en la nueva funcionalidad que se está agregando al tiempo de ejecución de RDMe para admitir SQL (posteriormente corregido, por cierto). No he tenido ningún problema en mi uso del sistema RDMe 10.0. Me ha funcionado con muy buen rendimiento y es un base de datos de alta disponibilidad. De hecho, esto también parece ser cierto para nuestros otros usuarios de RDMe 10.0. Desde su lanzamiento en julio pasado, hemos tenido muy pocos informes de problemas con él por parte de nuestros usuarios, un crédito al gran trabajo realizado por el equipo de Q / A de Raima.
He llegado a amar la arquitectura TFS porque aún no se ha bloqueado. SQL se ha bloqueado a menudo durante las sesiones de depuración (la inevitable falla de memoria, etc.), pero el TFS simplemente reconoce la desconexión y continúa ejecutándose. Debido a que el tiempo de ejecución de RDMe está separado del TFS, es mucho más difícil para una aplicación dañar la base de datos (no es imposible, solo más difícil). Todavía no he tenido ningún daño en la base de datos en mis pruebas y depuración de SQL.
También me encanta la capacidad de transacción de solo lectura y he incorporado su uso en el procesamiento de sentencias SELECT del nuevo SQL. Cuando se utiliza el modo de transacción de solo lectura, la ejecución de una instrucción SELECT emitirá automáticamente la llamada d_trrobegin en lugar de emitir los bloqueos de lectura de tabla necesarios. No se necesitan bloqueos y no se produce ningún bloqueo de las operaciones de la base de datos. Es muy rápido y muy limpio.
Si es un usuario de RDM Embedded y aún no ha decidido actualizar a la versión 10.0, permítame animarle a que lo haga. Explore las capacidades que ofrece la nueva arquitectura TFS. La flexibilidad y confiabilidad que obtendrá, creo, vale la pena.
Lista de funciones de la API principal de RDMe con una X que indica las que se utilizan en SQL | |||||
---|---|---|---|---|---|
* Las nuevas funciones que se lanzarán son en cursiva | |||||
d_blobdelete | X | d_findnm | X | d_recfrst | X |
d_blobread | X | d_findpm | X | d_reclast | |
d_blobseek | d_fldnum | d_reclock | |||
d_blobsize | X | d_freeall | X | d_reclstat | X |
d_blobtell | d_iclose | d_recnext | X | ||
d_blobtruncate | d_initfile | d_recnum | |||
d_blobwrite | X | d_initialize | X | d_recprev | |
d_close | X | d_internals | d_recread | X | |
d_closetask | X | d_iopen | X | d_recset | X |
d_cmtype | d_iopen_ptr | X | d_rectot | X | |
d_connect | X | desmembrar | X | d_recwrite | X |
d_cotype | d_isowner | X | d_rerdcurr | ||
d_crget | X | d_keydel | d_set_dberr | X | |
d_crread | X | d_keydir* | X | d_setdb | |
d_crset | X | d_keyexist | d_setfree | ||
d_crtype | X | d_keyfind | X | d_setkey | |
d_crwrite | X | d_keyfree | d_setlock | ||
d_csmget | d_keyfrst | X | d_setlstat | ||
d_csmread | d_keylast | d_setmm | |||
d_csmset | X | d_keylock | d_setmo | ||
d_csmwrite | d_keylstat | d_setmr | X | ||
d_csoget | X | d_keynext | X | d_setnum | |
d_csoread | X | d_keyprev | X | d_setom | |
d_csoset | X | d_keyrdstate | X | d_setoo | |
d_csowrite | d_keyread | X | d_setor | X | |
d_curkey | d_keystore | d_setpages | |||
d_dberr | d_keyszstate | X | d_setrm | ||
d_dbnum | X | d_keywrstate | X | d_setro | |
d_dbsetini | d_lmstat | d_timeout | X | ||
d_dbuserid | d_lock | X | d_trabort | X | |
d_dbver | d_makenew | d_tractivo | X | ||
d_decode_dba | X | d_members | d_trbegin | X | |
d_def_opt | d_off_opt | d_trdeletemark | X | ||
d_delete | X | d_on_opt | d_trend | X | |
d_destroy | d_open | X | d_trmark | X | |
d_discon | X | d_open_ptr | X | d_trprecommit | |
d_disdel | d_opentask | X | d_trrobegin | X | |
d_encode_dba | d_pkeyfind | X | d_trroend | X | |
d_fillnew | X | d_pkeynext | X | d_trrollback | X |
d_findco | X | d_pkeyprev | d_wrcurr | ||
d_findfm | X | d_rdcurr | |||
d_findlm | d_recfree |