Red de conocimiento informático - Material del sitio web - Cómo utilizar objetos en línea para procesar resultados de consultas en MySQL

Cómo utilizar objetos en línea para procesar resultados de consultas en MySQL

Los algoritmos hash integrados que solo aceptan números enteros no funcionan cuando el índice del fragmento no es una cadena de enteros puros. Para hacer esto, stringhash intercepta algunos caracteres en el campo de índice de segmento de acuerdo con los puntos de inicio y fin definidos por el usuario, los convierte en valores enteros largos de acuerdo con el valor binario Unicode de cada carácter y luego llama al hash incorporado. Algoritmo para resolver directamente la ruta del segmento: primero, modula el número de segmento lógico y luego asigna el número de segmento lógico directamente al segmento físico.

Los usuarios deben definir las matrices de longitud de partición [] y cuenta de partición [] y el binario hashSlice en rule.xml.

Durante la fase de inicio de DBLE, estas dos matrices se multiplicarán por puntos para obtener el módulo, que también es el número de cortes lógicos.

Y en base a la multiplicación cruzada de estos dos matrices, obtenemos Obtenga el número de sectores lógicos y la tabla de mapeo de sectores lógicos a sectores físicos (el número de sectores físicos se obtiene sumando los valores de los elementos de la matriz particiónCount[])

Además , De acuerdo con el binario hashSlice, se acuerda utilizar el valor del índice de partición. El valor del índice de partición determina el número de sectores.

Además, de acuerdo con el binario del segmento hash, la convención es usar la cadena del carácter 4 al carácter 5 en el valor del índice del segmento (la numeración de cadenas comienza desde 0, del número 3 al número 4 es igual al carácter 4 al carácter 5) Realizar la conversión "string-gt;integer"

Cuando DBLE se está ejecutando, cuando un usuario accede a una tabla usando este algoritmo, los sectores en el valor del índice del sector en el Se extrae la cláusula WHERE, y del 4º al 5º carácter, y luego se envía al siguiente paso

Establezca el valor acumulativo con un valor inicial de 0, intercepte un carácter a la vez, multiplique el valor acumulativo por 31 y luego agregue el valor Unicode del carácter como un entero largo al valor acumulativo, y así sucesivamente hasta que se procesen todos los caracteres interceptados. El valor acumulativo puede representar el índice de fragmentos del usuario y completar la conversión "string-gt; entero".

Modele el valor acumulativo según el paso anterior para obtener el número de fragmento lógico

Luego , de acuerdo con el número de segmento lógico, busque en la tabla de mapeo, obtenga directamente el número de segmento físico

Comparación de algoritmos de fragmentación similares a MyCat

Haga clic para ingresar la descripción de la imagen

Después de convertir la cadena a int, estos dos algoritmos son los mismos que el algoritmo de partición hash y sus diferencias también se heredan del algoritmo hash.

Notas de desarrollo

Índice de partición 1. Debe ser una cadena

Índice de partición 2. El método de configuración de partición física máxima es hacer la suma del recuento de partición[ ] matriz igual a 2880

Ejemplo:

lt;property name="partitionLength"gt;1lt;/propertygt;lt;property name="partitionCount"gt;2880lt;/propertygt ;

o

lt;nombre de propiedad="partitionLength"gt;1, 1lt;/propertygt;lt;nombre de propiedad="partitionCount"gt;1440, 1440lt;/propertygt;

Índice de segmentación 3.

Configure la partición física mínima haciendo que la suma de la matriz particiónCount[] sea igual a 1

Ejemplo

lt;property name="partitionLength"gt;2880lt;/propertygt;lt; propiedad nombre="partitionCount"gt;1lt;/propertygt;

Índice de partición 4.partitionLength y particionCount se tratan como dos matrices unidimensionales separadas por comas, y el producto escalar entre ellas debe estar en el rango [1, 2880] Dentro del rango

Índice de partición 5. La configuración de particionLength y particionCount depende del orden

lt;property name="partitionLength"gt;512,256lt;/propertygt;lt;property name="partitionCount"gt;1,2lt;/propertygt;

y

lt;nombre de propiedad="partitionLength"gt;256,512lt;/propertygt;lt; nombre de propiedad="partitionCount"gt;2,1lt;/propertygt;

y

lt; p>

Este es el resultado de diferentes particiones

Índice de partición 6. Cuando la longitud del campo de índice de partición es menor que la longitud de truncamiento especificada por el usuario, la longitud de truncamiento se reducirá de manera segura para que coincida con la longitud del campo de índice de partición<

Distribución de datos1. cuanto más beneficioso sea para los datos Distribución uniforme

Distribución de datos 2. Cuanto menor sea la tasa de repetición del contenido del campo de índice de partición, más uniforme será la distribución de datos

Precauciones de operación y mantenimiento

Extensión 1. Preliminar Extiende la partición sin cambiar el resultado de particiónCount multiplicado por particiónLongitud o particiónLongitud. Si realiza una partición previa y no cambia los resultados de la multiplicación de ParticiónCount y ParticiónLongitud o la configuración de interceptación hashSlice, puede evitar el reequilibrio de datos y solo migrar los datos involucrados

Extensión 2. Si necesita cambiar el producto escalar ParticiónCount y PartitionLength o la configuración de interceptación hashSlice, debe reequilibrar los datos

Extensión 3.

Reequilibrar datos

Reducir 1. Realice la fragmentación con anticipación y no cambie los resultados de la multiplicación de ParticiónCount y PartitionLength ni intercepte la configuración de hashSlice para evitar el reequilibrio de datos y solo necesite realizar migraciones relacionadas con los datos.

Reducción 2. La migración de datos está involucrada al cambiar los resultados del producto escalar ParticiónCount y ParticiónLongitud o al interceptar hashSlice

Reducir 3. Si necesita cambiar los resultados del producto escalar Partición y longitud de partición o cambiar la configuración de interceptación hashSlice, debe hacerlo reequilibrar los datos

Notas de configuración

Elementos de configuración 1. En rule.xml, los elementos configurables son?lt;property name="partitionLength"gt;?,lt;property name= "partitionCount"> y ?

Elemento de configuración 2. Configurelt;nombre de propiedad="partitionLength"gt;;

en la etiqueta rule.xml. El formato del contenido es:lt;El número de particiones virtuales que contiene la partición físicagt;[,lt;El número. de particiones virtuales mantenidas por la partición física El número de particiones virtuales gt;,...lt; El número de particiones virtuales mantenidas por la partición física gt;]

El número de particiones virtuales mantenidas por la partición física la partición debe ser un número entero y el número de particiones virtuales mantenidas por la partición física. Correspondiente al número de particiones físicas en el mismo orden de izquierda a derecha, el resultado del producto escalar de la longitud de la partición y el recuento de particiones debe estar en el rango [1, 2880 ]. El formato del contenido de la etiqueta es: lt;PhysicalPartitionCountgt;[, lt;PhysicalPartitionCountgt;,...lt;PhysicalPartitionCountgt;]

Entre ellos, el número de partición física debe ser un número entero y el número de partición física corresponde a la partición física en la misma secuencia. El número de particiones virtuales mantenidas de izquierda a derecha y el número de particiones físicas de izquierda a derecha. El resultado del producto escalar de la longitud de la partición y el número de partición debe estar dentro del rango de [1, 2880]. .

La semántica del elemento de configuración 4.partitionLength y particiónCount es que la partición física particiónCount[i] contiene la partición virtual particiónLongitud[i]

Por ejemplo

lt; property name="partitionLength"gt;512,256lt;/propertygt;lt;property name="partitionCount"gt;1,2lt;/propertygt;

La sintaxis es: 512 que contiene 512 sectores lógicos La partición física es 1, seguida de la partición física que contiene 256 sectores lógicos, que es 2

Elemento de configuración 5.

Tanto la longitud de partición como el número de partición son sensibles al orden de escritura

Por ejemplo

lt;property name="partitionLength"gt;512,256lt;/propertygt;lt;property name="partitionCount" gt ;1,2lt;/propertygt;

El resultado de la partición es que la primera partición física guarda el encabezado de 512 segmentos lógicos y el segundo segmento físico guarda los siguientes 256 segmentos lógicos. El tercer segmento físico contiene. los últimos 256 sectores lógicos, relativos a

lt;property name="partitionLength"gt;256, 512lt;/propertygt;lt;property name="partitionCount"gt;2 , 1lt;/propertygt;

El resultado de la partición es que la primera partición física guarda las primeras 256 particiones lógicas, la segunda partición física guarda las últimas 256 particiones lógicas y la tercera partición física guarda las últimas 512 particiones lógicas. Partición lógica

Elemento de configuración 6. ParticiónLongitud[] es todo 1, entonces la suma de la matriz ParticiónCount es igual al producto escalar de ParticiónLongitud y ParticiónCount, y la partición física y la partición lógica corresponderán uno a uno, que equivale al resto directo.

Elemento de configuración 7. La etiqueta en la regla de configuración intercepta xml a partir del primer carácter del campo de índice de partición:

Si desea interceptar k caracteres a partir del primer carácter ( k es un entero positivo), la forma de configuración puede ser "0: k", "k" o ": k";

Si desea interceptar k caracteres comenzando desde el carácter final (k es un entero positivo), la forma de configuración puede ser "-k: 0", "-k" o "-k k" o "-k:";

Si desea interceptar desde el carácter m-ésimo ( m y n son enteros positivos) n caracteres, luego primero calcule i = m - 1 y j = i n - 1, y luego configúrelo como "i: j";

Si desea interceptar n caracteres comenzando desde el carácter m-ésimo al final (m y n son enteros positivos), luego calcule i = -m n - 1 y luego configure el contenido como "-m:i";

Si no desea interceptar, configure el contenido como "0: 0";

Si no desea interceptar, configure el contenido como "0: 0". El formulario puede ser "0:0", "0:", ":0" o ":"