User Tools

Site Tools


en:wiki:3.-servidor:3.5.-replicador:e.-selectividad:start



Selectivity


We must understand by selectivity the set or rules we must define in order the clients (devices) recieve a “customized” database, NOT a copy about there is in the server.
In projects in which the server database is big, this is even mandatory, since the devices, obviously, are not going to support a database size so big.

From a project is going to be defined with selectivity, in the table where we have all the licenses of the devices, MASTER_REPLICA_SLAVE, it would have to put as value by default 1 at the CONDITIONAL field, so that everytime we sign a license with the xonemanager, this one is already selective by default.

The tables that intervene in the selectivity are:

FIELD DESCRIPTION
ADM_SELECTED_TEMPLATE Template table with the selectivity rules.
ADM_DINAMYC_SELECTED Table that associates a DEVICE with an USER.
MASTER_REPLICA_SELECTED Table that really defines the selectivity conditions and it is the one who looks into the replica server. It will have a record by each TABLE and each MID (device) that is going to enter in selectivity.
MASTER_REPLICA_SQUEUE Table with the operations of the MASTER_REPLICA_QUEUE table(QID field), which have met the selectivity rules defined in the MASTER_REPLICA_SELECTED table that every MID has to download (Device).


ADM_SELECTED_TEMPLATE


This table NOT defines directly the selectivity, IT IS A TEMPLATE to fill in later the MASTER_REPLICA_SELECTED table, that is really the table that defines the selectivity rules.

FIELD TYPE DESCRIPTION
ID Autonumeric
TABLENAME Varchar(50) Table name
ALWAYS Numeric ALWAYS=1, all the operations of the table specified at TABLENAME are received and which is defined at CRITERIA is ignored, ALWAYS=0, the query defined at the CRITERIA field is evaluated.
CONDITIONAL Numérico Deprecated. Used in the replica server earlier than .NET. When ALWAYS=1, CONDITIONAL=0 and when ALWAYS=0, CONDITIONAL=1.
CRITERIA Varchar(4096) If the criteriun is simple it just can be specified the condition (E.g.:IDEMPRESA=1) or if the condition is complex with several joins we just have to rescue the ROWID field of the values that meet the condition.


Examples of CRITERIA in TEMPLATE


/* Example of template record for the clients table, the clients are associated with an IDUSER, and when linking into ADM_DINAMYC_SELECTED the user with the device, if we link with this table, the device will receive the records which affect to that client by been associated to that user. The ##MID## macro will be replaced when we are going to fill up the MASTER_REPLICA_SELECTED table.  */
SELECT c.ROWID FROM gen_clientes c 
INNER JOIN adm_dinamyc_selected a ON c.IDUSUARIO=a.IDUSUARIO WHERE a.MID=##MID##
 
/* In this este otro ejemplo, para la tabla de visitas, el dispositivo únicamente recibirá las operaciones de visitas 
de los clientes que tienen asociado su IDUSUARIO. */
SELECT D.ROWID FROM gen_visitas D 
LEFT OUTER JOIN gen_clientes C ON D.IDCLIENTE= C.ID 
INNER JOIN adm_dinamyc_selected S ON c.IDUSUARIO=S.IDUSUARIO WHERE S.MID=##MID##

El campo CRITERIA es para especificar la SQL con la condición a cumplir, se pone Varchar(4096) o más, evitar el uso de NTEXT o TEXT en el tipo de dato, pues posteriormente no funcionará la función replace si queremos ejecutar alguna consulta sobre esta tabla reemplazando los valores para insertarlos en la tabla MASTER_REPLICA_SELECTED.


ADM_DINAMYC_SELECTED

Esta tabla contiene la relación entre un USUARIO y un MID (dispositivo). Esta relación se establece cuando se asocia Usuario-Dispositivo en el xonemanager.

1.- Datos en ADM_DINAMYC_SELECTED 2.- Asociación de USUARIO-DISPOSITIVO en xonemanager.

En esta tabla podemos poner otros campos que creamos necesarios para la selectividad de nuestro proyecto, de forma que podemos asociar un dispositivo con un IDZONA o un IDTIPO o con cualquier otra cosa que nos resulte necesaria.

MASTER_REPLICA_SELECTED

Esta tabla es la que define realmente las condiciones de selectividad del proyecto. Si una operación de la tabla MASTER_REPLICA_QUEUE del servidor cumple las condiciones definidas en ésta tabla, dicha operación se inserta en la tabla MASTER_REPLICA_SQUEUE que es la tabla que se mira para saber las operaciones que tienen que descargarse los dispositivos que tienen definida selectividad.

Si una tabla NO tiene ningún registro definido en la tabla MASTER_REPLICA_SELECTED para un determinado MID (dispositivo), dicho dispositivo NO recibirá operaciones por réplica que afecten a dicha tabla, ni tampoco se recibirá ningún registro en dicha tabla cuando se provisione una base de datos para ese dispositivo.

CAMPO TIPO DESCRIPCION
ID Autonumérico
MID Numérico Identificador del dispositivo (MASTER_REPLICA_SLAVE)
TBL Varchar(50) Nombre de la tabla
OPER Numérico Deprecated. Anterior al servidor .NET. Campo de sistema para compatibilidad con versiones antiguas del replicador.
CONDITIONAL Numérico Deprecated. Utilizado en el servidor de réplica anterior a .NET. Cuando ALWAYS=1, CONDITIONAL=0 y cuando ALWAYS=0, CONDITIONAL=1.
ALWAYS Numérico ALWAYS=1, se reciben todas las operaciones de la tabla especificada en TABLENAME y se ignora lo que haya definido en CRITERIA, con ALWAYS=0 se evalúa la consulta que haya definida en el campo CRITERIA
CONSOLIDATE Numérico Deprecated. Anterior al servidor .NET. Campo de sistema para compatibilidad con versiones antiguas del replicador.
CRITERIA Varchar(4096) Si el criterio es simple se puede especificar simplemente la condición (P.Ej:IDEMPRESA=1) o si la condición es compleja con varios joins simplemente tendremos que rescatar el campo ROWID de los valores que cumplen la condición.
CRITERIAPROVISIONING Varchar(4096) Opcional. Puede ser utilizado para saltarnos la condición definida para la selectividad en el campo CRITERIA a la hora de provisionar una base de datos. Si este campo está vacío, se coge lo que haya en el campo CRITERIA. La SQL que se defina en este campo rescataría TODOS los datos de la tabla en cuestión y NO únicamente el ROWID. Para que este campo tenga efecto, en la configuración del servicio xoneprovisioning hemos de tener el parámetro Using-subqueries=true.

SQLs UTILES

Rellenar la Selectividad

Consulta para generar de nuevo la selectividad (MASTER_REPLICA_SELECTED) a partir de la plantilla definida en ADM_SELECTED_TEMPLATE sustituyendo la cadena ##MID## por el MID correspondiente de la tabla MASTER_REPLICA_SLAVE.

INSERT INTO master_replica_selected (MID,TBL,ALWAYS,CRITERIA)
	SELECT S.MID, T.TABLENAME, T.ALWAYS, REPLACE(T.CRITERIA,'##MID##',S.MID)
	FROM master_replica_slave S, adm_selected_template T
	WHERE MID>1

La consulta anterior vuelve a generar los registros en la tabla MASTER_REPLICA_SELECTED para todos los MID a partir del 1, si previamente había registros en ésta tabla, habría que borrarlos. Tras rellenar de nuevo la tabla de la selectividad, habría que reiniciar el servidor de réplica para que tome los nuevos valores.

Ver registros por recibir

Consulta para conocer las operaciones que tiene pendientes de descarga por réplica un MID(Dispositivo). Estas operaciones son las que hayan cumplido los criterios de selectividad descritos en la tabla MASTER_REPLICA_SELECTED, que han sido puestos en cola en la tabla MASTER_REPLICA_SQUEUE.

SELECT * 
    FROM master_replica_queue 
    	WHERE (ID IN (SELECT qid FROM master_replica_squeue WHERE MID=432) 
    	AND 1=(SELECT CONDITIONAL FROM master_replica_slave WHERE MID=432))
    OR (
    	(ID>(SELECT LASTID FROM master_replica_slave WHERE MID=432) AND MID<>0 AND MID<>432)
    	AND (0=(SELECT CONDITIONAL FROM master_replica_slave WHERE MID=432)
    		OR (SELECT CONDITIONAL FROM master_replica_slave WHERE MID=432) IS NULL) 
    	)     
    OR (ID>(SELECT LASTDMID FROM master_replica_slave WHERE MID=432) AND DMID=432)
ORDER BY DMID DESC, ID ASC;

La consulta anterior saca un listado con las siguientes operaciones que tiene pendientes de descargarse un dispositivo, por orden de descarga. Esta consulta sirve tanto para los dispositivos “selectivos” (primera parte del WHERE) como para los “no selectivos” (segunda parte del WHERE, el primer OR). Debemos saber que si hay algún DMID(Operación generada por el servidor a petición de un dispositivo)(segundo OR en la consulta) pendiente de descarga, éste tiene absoluta prioridad para descargarse, por eso ordenamos primero por DMID desc y después por ID asc.

Para saber los DMID que tiene un dispositivo por descargarse:

SELECT * FROM master_replica_queue WHERE ID>(select LASTDMID from master_replica_slave where MID=432) AND DMID=432 ORDER BY ID ASC;

en/wiki/3.-servidor/3.5.-replicador/e.-selectividad/start.txt · Last modified: 2018/06/25 10:49 (external edit)