ES2788299T3 - Compartición y resolución de conflictos de cambios de datos en un sistema de bases de datos multimaestro - Google Patents
Compartición y resolución de conflictos de cambios de datos en un sistema de bases de datos multimaestro Download PDFInfo
- Publication number
- ES2788299T3 ES2788299T3 ES11807426T ES11807426T ES2788299T3 ES 2788299 T3 ES2788299 T3 ES 2788299T3 ES 11807426 T ES11807426 T ES 11807426T ES 11807426 T ES11807426 T ES 11807426T ES 2788299 T3 ES2788299 T3 ES 2788299T3
- Authority
- ES
- Spain
- Prior art keywords
- version
- site
- data object
- change
- vector
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2315—Optimistic concurrency control
- G06F16/2329—Optimistic concurrency control using versioning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/273—Asynchronous replication or reconciliation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
Un método informático para compartir y resolver los conflictos de los cambios de datos en un sistema de bases de datos multimaestro que comprende una pluralidad de sitios (101, 102, 103), comprendiendo el método: en un primer sitio de la pluralidad de sitios: hacer (305) un primer cambio en un objeto (201) de datos en particular en una base de datos en el primer sitio para producir una primera versión del objeto de datos en particular, y compartir (315) el primer cambio con uno o más sitios de la pluralidad de sitios; en un segundo sitio de la pluralidad de sitios: realizar un segundo cambio en el objeto de datos en particular en una base de datos en el segundo sitio para producir una segunda versión del objeto de datos en particular; recibir (405) una actualización que refleja el primer cambio; en donde la actualización incluye: una identificación del objeto de datos en particular, datos que reflejan el primer cambio en el objeto de datos en particular, y un primer vector de versión que representa la primera versión del objeto de datos en particular; obtener un segundo vector de versión de una base de datos en el segundo sitio, representando el segundo vector de versión la segunda versión del objeto de datos en particular; comparar (415) el primer vector de versión con el segundo vector de versión para determinar si la primera versión del objeto de datos en particular y la segunda versión del objeto de datos en particular son idénticas, están ordenadas o son concurrentes; en el primer sitio de la pluralidad de sitios: realizar un tercer cambio en la base de datos en el primer sitio a un conjunto de uno o más vínculos que conectan dos objetos de datos, involucrando el tercer cambio agregar o eliminar uno o más vínculos del conjunto de vínculos, incluyendo los dos objetos de datos el objeto de datos en particular; y compartir el tercer cambio con uno o más sitios de la pluralidad de sitios; en el segundo sitio de la pluralidad de sitios: realizar un cuarto cambio en la base de datos en el segundo sitio al conjunto de vínculos, involucrando el cuarto cambio agregar o eliminar uno o más vínculos del conjunto de vínculos; recibir una actualización que refleja el tercer cambio; en donde la actualización incluye: una identificación del conjunto de vínculos, datos que reflejan el tercer cambio, y un tercer vector de versión que representa una versión del conjunto de vínculos en el primer sitio resultante del tercer cambio, siendo el tercer vector de versión distinto de los objetos de datos conectados por los vínculos; obtener un cuarto vector de versión de la base de datos en el segundo sitio, representando el cuarto vector de versión una versión del conjunto de vínculos en el segundo sitio resultante del cuarto cambio, siendo el cuarto vector de versión distinto de los objetos de datos conectados por los vínculos; comparar el tercer vector de versión con el vector de la cuarta versión para determinar si la versión del conjunto de vínculos resultante del tercer cambio y la versión del conjunto de vínculos resultante del cuarto cambio son idénticas, están ordenadas o son concurrentes; y actualizar el vector de la cuarta versión para incorporar el tercer cambio.
Description
DESCRIPCIÓN
Compartición y resolución de conflictos de cambios de datos en un sistema de bases de datos multimaestro Campo técnico
La presente descripción generalmente se refiere a sistemas informáticos distribuidos y, en particular, a la compartición y resolución de los conflictos de los cambios de datos en un sistema de bases de datos multimaestro. Antecedentes
En un sistema de bases de datos multimaestro, los datos se almacenan en un grupo de bases de datos, se pueden realizar cambios de datos en cualquier miembro del grupo, y los cambios de datos realizados en un miembro se propagan al resto del grupo. Los sistemas de bases de datos multimaestro normalmente emplean o bien un esquema de replicación "síncrono" o bien uno "asíncrono" para propagar un cambio realizado en una base de datos al resto de las bases de datos del grupo.
En la replicación multimaestro síncrona, cada cambio se aplica a todas las bases de datos del grupo inmediatamente o a ninguna de las bases de datos si una o más de las bases de datos del grupo no pueden aceptar el cambio. Por ejemplo, una de las bases de datos puede no estar en línea o disponible. La replicación multimaestro síncrona generalmente se logra utilizando un protocolo de asignación de dos fases.
Por el contrario, en la replicación multimaestro "asíncrona", un cambio realizado en una base de datos es inmediatamente aceptado por la base de datos, pero la propagación del cambio a otras bases de datos en el grupo puede diferirse. Debido a que la propagación de los cambios puede diferirse, si una o más de las bases de datos del grupo no están disponibles, las bases de datos disponibles aún pueden aceptar cambios, poniendo en cola los cambios localmente hasta que puedan propagarse. Por esta razón, los sistemas de bases de datos multimaestro que emplean una estrategia de replicación asíncrona se consideran más disponibles que los sistemas de bases de datos multimaestro que emplean una estrategia de replicación síncrona. Sin embargo, la replicación asíncrona aumenta la posibilidad de conflictos que se producen como resultado de cambios concurrentes en la base de datos. Un conflicto puede surgir en un sistema de bases de datos multimaestro cuando los mismos datos se cambian en dos bases de datos diferentes antes de que cualquiera de esos cambios pueda propagarse al otro. Por ejemplo, supóngase que en la base de datos A los datos que representan el color de ojos de una persona en particular se cambian a "marrón", y después de ese cambio, pero antes de que ese cambio pueda propagarse a la base de datos B, los datos en la base de datos B que representan el color de ojos de una persona en particular se cambian a "verde". Sin información adicional, no está claro qué cambio es el cambio "correcto" que deberían adoptar todas las bases de datos del sistema.
Los sistemas de bases de datos multimaestro que emplean un esquema de replicación asíncrona proporcionan normalmente mecanismos para "resolver conflictos". Según se usa en el presente documento, el término "resolver el conflicto" se refiere generalmente a la detección y resolución de un conflicto tal que una resolución del conflicto es en última instancia adoptada por todas las bases de datos del sistema. En algunos casos, el sistema de bases de datos multimaestro puede ser capaz de resolver el conflicto automáticamente sin requerir la intervención del usuario. En otros casos, se puede requerir la intervención del usuario para determinar cuál de los cambios concurrentes se debería adoptar.
En los sistemas de bases de datos multimaestro que emplean replicación asíncrona, cuándo se detectan los conflictos tiene un efecto enorme en la integridad de los datos de la base de datos. Por ejemplo, algunos sistemas de bases de datos pueden admitir la "resolución de objetos". La resolución de objetos involucra a un usuario o a un proceso informático automatizado que determina que dos o más objetos de datos distintos realmente representan la misma entidad del mundo real e invoca una función del sistema de bases de datos para que los objetos de datos distintos se resuelvan en un único objeto de datos. Por ejemplo, supóngase que hay dos objetos de datos distintos, uno con un valor de propiedad de nombre de "John Smith", el otro con un valor de propiedad de nombre de "J. S.". Un usuario puede decidir que estos dos objetos de datos representan a la misma persona en el mundo real. En consecuencia, en un sistema de bases de datos que admite la resolución de objetos, el usuario puede invocar una función del sistema de bases de datos para que los dos objetos de datos distintos se resuelvan en un único objeto de datos que tenga un valor de propiedad de nombre "John Smith" o "J. S." según lo seleccionado por el usuario que resuelve los objetos juntándolos.
En los sistemas de bases de datos multimaestro que emplean replicación asíncrona, sería deseable detectar como un conflicto cambios concurrentes que incluyen un cambio en la resolución del objeto. Por ejemplo, supóngase que en la base de datos A, el usuario 1 cambió la propiedad del color del cabello de un objeto de datos que representa a una persona llamada "J. S." de "castaño" a "rubio". Además, supóngase que antes de que el cambio de color del cabello realizado por el usuario 1 pueda propagarse desde la base de datos A a la base de datos B, el usuario 2 cambia la base de datos B resolviendo el objeto de datos que representa "J. S." juntándolo con otro objeto de datos
que representa a una persona llamada "John Smith". Sería deseable que el sistema de bases de datos multimaestro detecte estos dos cambios concurrentes como un conflicto ya que el usuario 2 pudiera no haber decidido resolver "J. S." y "John Smith" juntándolos si el usuario 2 hubiera sabido que el color del cabello de John Smith fue cambiado por el usuario 1. De manera similar, el usuario 1 pudiera no haber decidido cambiar el color del cabello de "J. S." si el usuario 1 hubiera sabido que el usuario 2 resolvió "J. S." y "John Smith" juntándolos.
Entonces, lo que se necesita es un sistema de bases de datos multimaestro que emplee replicación asíncrona que detecte conflictos resultantes de cambios concurrentes de una manera que esté en línea con las expectativas del usuario y que maneje la resolución de conflictos y la propagación de tales cambios de manera apropiada. Las realizaciones de la presente invención satisfacen estas y otras necesidades.
Los planteamientos descritos en esta sección son planteamientos que podrían seguirse, pero no necesariamente planteamientos que se hayan concebido o seguido previamente. Por lo tanto, a menos que se indique lo contrario, no se debe suponer que ninguno de los planteamientos descritos en esta sección cualifica como técnica anterior simplemente en virtud de su inclusión en esta sección.
Documento "Detection of mutual inconsistency in distributed system", por Stott Parker D. et al, Transacciones IEEE en Ingeniería de Software, Centro de Servicio IEEE, Los Alamitos, CA, EE. UU., Vol. SE-09, n° 3, 1 de mayo de 1983, páginas 240-247, XP000654801, ISSN: 0098-5589, describe cómo los vectores de versión pueden usarse para rastrear actualizaciones de objetos de archivo en un sistema de archivos distribuido y su aplicación en una replicación positiva.
Breve descripción de los dibujos
La presente invención se ilustra a modo de ejemplo, y no a modo de limitación, en las figuras de los dibujos adjuntos y en los que los números de referencia similares se refieren a elementos similares y en los que:
La FIG. 1 ilustra un sistema de bases de datos multimaestro para su uso en el intercambio y la resolución de conflictos de cambios de datos entre una pluralidad de sitios de replicación conforme a una realización de la invención.
La FIG. 2 ilustra un modelo de datos conceptual centrado en objetos conforme a una realización de la invención. La FIG. 3 ilustra un método para compartir un cambio de datos a un objeto de datos en un sistema de bases de datos multimaestro usando vectores de versión por objeto, conforme a una realización de la invención.
La FIG. 4 ilustra un método para detectar y resolver un conflicto que involucra cambios concurrentes en un objeto de datos usando vectores de versión por objeto, conforme a una realización de la invención.
La FIG. 5 ilustra un ejemplo de detección y resolución de un conflicto que involucra cambios concurrentes a un objeto de datos usando vectores de versión por objeto conforme a una realización de la invención.
La FIG. 6 ilustra un ejemplo de intercambio de cambios de datos usando vectores de versión por conjunto de vínculos conforme a una realización de la invención.
La FIG. 7 ilustra un sistema informático con el que se puede implementar una realización.
Descripción detallada
Introducción
Con referencia a las figuras, a continuación se describirán realizaciones ejemplares de la invención. Las realizaciones ejemplares se describen principalmente con referencia a diagramas de bloques o a diagramas de flujo. En cuanto a los diagramas de flujo, cada bloque dentro de los diagramas de flujo representa tanto un paso del método como un elemento del aparato para realizar el paso del método. Dependiendo de la implementación, el elemento del aparato correspondiente puede configurarse en hardware, software, firmware o en combinaciones de los mismos.
Además, en la siguiente descripción, a efectos de explicación, se exponen numerosos detalles específicos para proporcionar una comprensión exhaustiva de la presente invención. Sin embargo, será evidente que la presente invención se puede emplear sin estos detalles específicos. En otros casos, los diagramas de bloques incluyen estructuras y dispositivos bien conocidos para evitar complicar innecesariamente la presente invención.
Resumen
Según una o más realizaciones de la presente invención, un sistema de bases de datos multimaestro y un método informático proporcionan la compartición y la resolución de conflictos de cambios de datos entre una pluralidad de sitios de replicación.
En una realización particular, los cambios de datos en sitios en los objetos de datos son rastreados por cada sitio en función de los objetos de datos usando vectores de versión por objetos de datos. El método incluye un primer dispositivo informático en un primer sitio que realiza un cambio en un objeto de datos. El primer dispositivo informático comparte el cambio en el objeto de datos con uno o más sitios. Un segundo dispositivo informático en un segundo sitio recibe una actualización que refleja el cambio en el objeto de datos realizado por el primer dispositivo informático en el primer sitio. La actualización incluye una identificación del objeto de datos, datos que reflejan el cambio en el objeto de datos y un vector de versión del objeto de datos en el primer sitio. El segundo dispositivo informático obtiene un vector de versión del objeto de datos en el segundo sitio y compara el vector de versión del objeto de datos en el primer sitio con el vector de versión del objeto de datos en el segundo sitio para determinar si los dos vectores de versión son idénticos, están ordenados o son concurrentes. En función de esta comparación, el segundo sitio intenta resolver automáticamente el conflicto entre las dos versiones del objeto de datos si, de acuerdo con sus vectores de versión, son concurrentes, o incorpora automáticamente la actualización recibida en la copia del objeto de datos del segundo sitio si, de acuerdo con sus vectores de versión, la versión del objeto de datos en el segundo sitio está ordenada antes de la versión recibida en la actualización.
En otra realización particular, los cambios de datos en los sitios en vínculos que conectan dos objetos de datos se rastrean en base al conjunto de vínculos usando vectores de versión por conjunto de vínculos. El método incluye un primer dispositivo informático en un primer sitio que realiza un cambio en un conjunto de vínculos que conectan dos objetos de datos. El primer dispositivo informático comparte el cambio en el conjunto de vínculos con uno o más sitios. Un segundo dispositivo informático en un segundo sitio recibe una actualización que refleja el cambio en el conjunto de vínculos realizado por el primer dispositivo informático en el primer sitio. La actualización incluye una identificación del conjunto de vínculos y un vector de versión del conjunto de vínculos en el primer sitio. El segundo dispositivo informático obtiene un vector de versión del conjunto de vínculos en el segundo sitio y compara el vector de versión del conjunto de vínculos en el primer sitio con el vector de versión del conjunto de vínculos en el segundo sitio para determinar si los dos vectores de versión son idénticos, están ordenados o son concurrentes. En función de esta comparación, el segundo sitio intenta resolver automáticamente el conflicto entre las dos versiones del conjunto de vínculos si, de acuerdo con sus vectores de versión, son concurrentes, o incorpora automáticamente la actualización recibida en la copia del segundo sitio del conjunto de vínculos si, de acuerdo con sus vectores de versión, la versión del conjunto de vínculos en el segundo sitio está ordenada antes de la versión recibida en la actualización.
En otra realización particular, los vectores de versión por objeto se usan para detectar un conflicto resultante de cambios concurrentes en dos o más sitios en los que al menos uno de los cambios concurrentes incluye un cambio en la resolución del objeto. El método incluye un primer dispositivo informático en un primer sitio de la pluralidad de sitios que resuelven dos o más objetos de datos juntándolos mediante un elemento de resolución de objetos de un sistema de bases de datos o de una aplicación de base de datos. El primer dispositivo informático comparte el cambio en la resolución con uno o más sitios de la pluralidad de sitios. Un segundo dispositivo informático recibe una actualización que refleja el cambio en la resolución realizado por el primer dispositivo informático en el primer sitio. La actualización incluye una identificación de cada uno de los dos o más objetos de datos que se resolvieron juntándolos y, para cada uno de los dos o más objetos de datos, un vector de versión del objeto de datos en el primer sitio. El segundo dispositivo informático obtiene, para cada uno de los dos o más objetos de datos, un vector de versión del objeto de datos en el segundo sitio. El segundo dispositivo informático compara, para cada uno de los dos o más objetos de datos, el vector de versión del objeto de datos en el primer sitio con el vector de versión del objeto de datos en el segundo sitio para determinar si las dos versiones son idénticas, están ordenadas, o son concurrente. En respuesta al segundo dispositivo informático que determina que el vector de versión de al menos un objeto de datos de los dos o más objetos de datos en el primer sitio es concurrente con el vector de versión de al menos un objeto de datos en el segundo sitio, el segundo dispositivo informático determina que el cambio en la resolución realizado por el primer dispositivo informático en el primer sitio entra en conflicto con la versión de al menos un objeto de datos en el segundo sitio.
Otras realizaciones incluyen, sin limitación, un medio no transitorio legible por ordenador que incluye instrucciones ejecutables por procesador que permiten que una unidad de procesamiento implemente uno o más aspectos de los métodos descritos, así como un sistema configurado para implementar uno o más aspectos de los métodos descritos.
Sistema de bases de datos multimaestro con motor de resolución de conflictos
La FIG. 1 ilustra un sistema 100 de base de datos multimaestro para su uso en la compartición y resolución de conflictos de cambios de datos entre una pluralidad de sitios de replicación conforme a una realización de la invención. En una realización, los sitios 101, 102 y 103 están unidos a través de una o más redes de datos tales como Internet, una o más redes de área amplia (WAN), una o más redes de área local (LAN), uno o más buses de comunicación de red o alguna combinación de los mismos. No es necesario que exista una red de datos extremada
o continuamente disponible entre los sitios de replicación y la(s) red(es) de datos que conecta(n) dos sitios cualesquiera puede(n) estar solo disponibles periódicamente. En otra realización, uno o más de los sitios no están conectados a ningún otro sitio en el sistema y los datos se transportan a y desde estos sitios manualmente utilizando medios portátiles o un dispositivo de medios portátil tal como un disco compacto (CD), un disco digital versátil (DVD), un dispositivo flash de bus de serie universal (USB), etc.
Cada sitio 101, 102 y 103 puede comprender uno o más dispositivos informáticos en red, tales como uno o más ordenadores de estaciones de trabajo, ordenadores de servidores, ordenadores portátiles, dispositivos informáticos móviles, o combinaciones de los mismos conectados entre sí a través de una o más redes de datos. Además, aunque solo se muestran tres sitios en la FIG. 1, el sistema 100 de base de datos multimaestro puede comprender muchos cientos o incluso muchos miles de sitios distribuidos geográficamente.
Según una realización, cada sitio 101, 102 y 103 tiene copias 111, 112 y 113 del mismo cuerpo de datos. El cuerpo de datos puede ser, por ejemplo, una o más tablas en una base de datos relacional. Sin embargo, las realizaciones de la invención no están limitadas a bases de datos relacionales y puede usarse cualquier tipo de base de datos capaz de admitir el modelo de datos conceptuales descrito en el presente documento. Los ejemplos no limitantes de tipos de bases de datos capaces de admitir el modelo de datos conceptual descrito en el presente documento incluyen las bases de datos relacionales, las bases de datos jerárquicas y las bases de datos orientadas a objetos. Con respecto a ese cuerpo de datos particular, el sitio 101 puede configurarse para propagar de manera asíncrona al sitio 102 los cambios realizados en la copia 111, y propagar de manera asíncrona al sitio 103 los cambios realizados en la copia 111. De manera similar, el sitio 102 puede configurarse para propagar de manera asíncrona al sitio 101 los cambios realizados en la copia 112, y propagar de manera asíncrona al sitio 103 los cambios realizados en la copia 212. El sitio 103 puede configurarse para propagar de manera asíncrona a ambos sitios 101 y 102 los cambios realizados en la copia 113. Sin embargo, no es necesario que cada sitio deba configurarse para propagar a cualquier otro sitio los cambios realizados en su copia del cuerpo de datos. En otras palabras, no se requiere una topología de sitio multimaestro de malla completa para implementar las realizaciones de la invención y se pueden usar topologías multimaestro de malla parcial o en cascada.
Como el sistema 100 emplea un esquema de replicación asíncrona, cada copia 111, 112 y 113 del cuerpo de datos es de manera general consistente con las otras copias. Es decir, cada copia puede diferir de vez en cuando, de modo que en cualquier momento dado la vista de una copia del cuerpo de datos puede ser diferente de la vista de otra copia del cuerpo de datos. En ausencia de nuevos cambios, se espera que las copias se vuelvan consistentes entre sí. Por lo tanto, además de ser de manera general coherentes entre sí, también se puede decir que las copias 112, 112, 113, etc., son en última instancia consistentes.
Cada sitio 101, 102 y 103 tiene una lógica 120 de resolución de conflictos para recibir cambios remotos al cuerpo de datos desde otros sitios, detectar conflictos, resolver conflictos detectados bien de forma automática o bien con asistencia del usuario, y compartir cambios locales en el cuerpo de datos con otros sitios. La lógica 120 de resolución de conflictos puede implementarse como uno o más programas de software de ordenador, una o más lógicas programables de campo, lógica cableada o una combinación de las mismas. En una realización, la lógica 120 de resolución de conflictos es un componente de software de un sistema de gestión de base de datos tal como los disponibles comercialmente de Oracle Corporation de Redwood Shores, California y de Microsoft Corporation de Redmond Washington. En otra realización, la lógica 120 de resolución de conflictos es un componente de software de una aplicación basada en red, basada en servidor o de escritorio que utiliza un sistema de gestión de base de datos para realizar las técnicas de resolución de conflictos descritas en el presente documento. En otra realización más, la lógica 120 de resolución de conflictos se implementa en parte por una aplicación basada en red, basada en servidor o de escritorio y en parte por un sistema de gestión de base de datos.
Según se usa en el presente documento, el término "cambio", a menos que sea evidente de otra manera por el texto circundante, se refiere a una adición, edición o eliminación en una copia del cuerpo de datos en un sitio. Un cambio puede ser iniciado por un usuario o un proceso informático. Además, un cambio también puede iniciarse mediante la lógica 120 de resolución de conflictos en respuesta a la recepción de la notificación de un cambio anterior realizado en un sitio diferente del sitio que recibe la notificación.
Según se usa en el presente documento, el término "actualización", a menos que sea evidente de otra manera por el texto circundante, se refiere a la información sobre un cambio que se envía desde el sitio que realizó el cambio a otro sitio. Cada cambio puede dar lugar a que se reciba una actualización en todos los otros sitios para que los otros sitios puedan incorporar el cambio en sus respectivas copias del cuerpo de datos. La recepción de una actualización en un sitio puede generar un conflicto con la copia del cuerpo de datos del sitio receptor. Las técnicas implementadas por la lógica 120 de resolución de conflictos para detectar y resolver conflictos en diversos escenarios se describen con mayor detalle a continuación.
Modelo de datos centrado en objetos
En una realización, el cuerpo de datos, del cual cada sitio 101, 102 y 103 guarda una copia, está estructurado conceptualmente conforme a un modelo de datos centrado en objetos. Debe entenderse que este modelo de datos conceptual es independiente de cualquier modelo de datos de base de datos particular que pueda usarse para almacenar una copia del cuerpo de datos en un sitio. Por ejemplo, cada objeto del modelo de datos conceptual puede corresponder a una o más filas en una base de datos relacional o una entrada en la base de datos de protocolo ligero de acceso a directorios (LDAP).
La FIG. 2 ilustra un modelo 200 de datos conceptuales centrado en objetos según una realización. El modelo 200 se centra en la noción de un objeto 201 de datos. En el nivel más alto de abstracción, el objeto 201 de datos es un contenedor de información que representa cosas del mundo. Por ejemplo, el objeto 201 de datos puede representar una entidad tal como una persona, un lugar, una organización u otro sustantivo. El objeto 201 de datos puede representar un acontecimiento que ocurre en un punto en el tiempo o durante un tiempo. El objeto 201 de datos puede representar un documento u otra fuente de datos no estructurada, tal como un mensaje de correo electrónico, un informe de noticias o un artículo o documento escrito. Como mínimo, cada objeto 201 de datos está asociado con un identificador único que identifica de manera única el objeto de datos dentro del sistema 100. Cada objeto 201 de datos también puede tener un tipo (por ejemplo, Persona, Acontecimiento o Documento) y un nombre para mostrar que puede ser el valor de una propiedad particular del objeto de datos.
Cada objeto 201 de datos puede tener una o más propiedades 203. Las propiedades 203 son atributos del objeto 201 de datos que representan elementos de datos individuales. Como mínimo, cada propiedad 203 de un objeto 201 de datos tiene un tipo y un valor. Los diferentes tipos de objetos de datos pueden tener diferentes tipos de propiedades. Por ejemplo, un objeto de datos Persona podría tener una propiedad Color de ojos y un objeto Acontecimiento podría tener una propiedad Fecha. En una realización, el conjunto de tipos de objetos de datos y el conjunto de tipos de propiedades para cada tipo de objeto de datos admitido por el sistema 100 se definen de acuerdo con una ontología predefinida o definida por el usuario o con otra estructura jerárquica de conocimiento mediante subcategorización de tipos de objetos y tipos de propiedades según sus cualidades relevantes y/o cognitivas. Además, el modelo 200 de datos puede admitir multiplicidad de propiedades. En particular, se puede permitir que un objeto 201 de datos tenga más de una propiedad 203 del mismo tipo. Por ejemplo, un objeto de datos Persona puede tener múltiples propiedades de Dirección o múltiples propiedades de Nombre.
Cada vínculo 202 representa una conexión entre dos objetos 201 de datos. En una realización, la conexión es a través de una relación, de un acontecimiento o mediante propiedades coincidentes.
Una conexión de relación puede ser asimétrica o simétrica. Por ejemplo, el objeto de datos A Persona puede estar conectado al objeto de datos B Persona por una relación de Hijo de (donde el objeto de datos B Persona tiene una relación asimétrica de Padre de con el objeto de datos A Persona), una relación simétrica de Parentesco con el objeto de datos C Persona, y una relación asimétrica de Miembro de con el objeto de datos X Organización. El tipo de relación entre dos objetos de datos puede variar según los tipos de objetos de datos. Por ejemplo, el objeto de datos A Persona puede tener una relación de Aparecer en con el objeto de datos Y Documento o tener una relación de Participar en con el objeto de datos E Acontecimiento.
Como ejemplo de una conexión de acontecimiento, dos objetos de datos de Persona pueden estar conectados por un objeto de datos de Vuelo de línea aérea que representa un vuelo de una línea aérea particular si viajaron juntos en ese vuelo, o por un objeto de datos de Reunión que representa una reunión particular si ambos asistieron a esa reunión. En una realización, cuando dos objetos de datos están conectados por un acontecimiento, también están conectados por relaciones, en las que cada objeto tiene una relación específica con el acontecimiento, tal como, por ejemplo, una relación de Aparece en.
Como ejemplo de una conexión de propiedades coincidentes, dos objetos de datos Persona que representan un hermano y una hermana pueden tener ambos una propiedad Dirección que indica dónde viven. Si el hermano y la hermana viven en la misma casa, entonces sus propiedades de Dirección probablemente contengan información similar, si no idéntica. En una realización, se puede establecer un vínculo entre dos objetos de datos basándose en propiedades similares o coincidentes de los objetos de datos.
Los anteriores son solamente algunos ejemplos de los tipos de conexiones que pueden representarse mediante un vínculo y se pueden representar otros tipos de conexiones. Por lo tanto, debe entenderse que las realizaciones de la invención no están limitadas a ningún tipo particular de conexiones entre objetos de datos. Por ejemplo, un documento puede contener dos entidades etiquetadas diferentes. Un vínculo entre dos objetos de datos puede representar una conexión entre estas dos entidades a través de su aparición conjunta dentro del mismo documento.
Cada objeto 201 de datos puede tener múltiples vínculos con otro objeto 201 de datos para formar un conjunto 204 de vínculos. Por ejemplo, dos objetos de datos de Persona que representan un esposo y una esposa podrían estar vinculados a través de una relación de Cónyuge de, una propiedad coincidente (Dirección) y un acontecimiento (Boda).
En una realización, el modelo 200 de datos admite la resolución de objetos. Como se mencionó anteriormente, la resolución de objetos incluye un usuario o un proceso informático automatizado que determina que dos o más objetos 201 de datos distintos realmente representan la misma entidad del mundo real e invoca una función del sistema 100 en un sitio 101, 102, 103, etc. para que los objetos de datos distintos aparezcan ante los usuarios del sistema 100 como si fueran un único objeto de datos. En una realización, cuando un objeto 201 de datos se resuelve juntándolo con otro objeto 201 de datos, las propiedades y vínculos de un objeto de datos se copian en el otro objeto de datos y luego se eliminan del objeto de datos desde el que se copiaron. Sin embargo, ambos objetos de datos aún son retenidos por el sistema. Además de facilitar la capacidad de separar problemas de objetos de datos que previamente se resolvieron juntándolos, retener los objetos de datos después de resolverlos juntándolos facilita la detección y resolución de conflictos según se describe con mayor detalle a continuación.
Vectores de versión por objeto de datos
Un vector de versión es un mecanismo conocido para rastrear cambios en sistemas distribuidos. Sin embargo, los vectores de versión se emplean normalmente en función del sitio. Es decir, con implementaciones típicas de vectores de versión en sistemas distribuidos, cada sitio usa un único vector de versión para rastrear todos los cambios realizados en la copia de la base de datos guardada por ese sitio.
Según una realización de la invención, para rastrear y resolver los conflictos de los cambios en el cuerpo de datos, cada sitio 101, 102, 103, etc. guarda vectores de versión en función de cada objeto de datos. Al hacerlo, los conflictos que involucran cambios en las propiedades de los objetos de datos y los conflictos que involucran cambios en la resolución de los objetos pueden detectarse y resolverse adecuadamente como se explica con mayor detalle a continuación.
En una realización, cada sitio guarda un vector de versión para cada objeto de datos gestionado por el sistema. Por lo tanto, para un sistema que tiene m sitios que gestionan n objetos de datos, cada sitio guardará n vectores de versión para un total de m * n vectores de versión guardados por todos los m sitios. Cada vector de versión puede contener hasta m elementos, uno para cada uno de los m sitios. Cada elemento de un vector de versión tiene un valor que representa un reloj lógico para el objeto de datos asociado en el sitio correspondiente al elemento. En una realización práctica, para conservar el espacio de almacenamiento de datos, los datos guardados en un sitio que representa un vector de versión pueden no representar todos los m elementos, sino algún subconjunto de los m elementos. Por ejemplo, los elementos de un vector de versión que tienen un valor predeterminado pueden no estar representados.
Cada sitio tiene, en cada vector de versión que guarda el sitio, su propio valor de reloj lógico como uno de los elementos. Este valor de reloj lógico representa la versión del objeto de datos asociado en el sitio que guarda el vector de versión. Cada otro elemento en el vector de versión representa la mejor estimación del sitio en función de las actualizaciones que el sitio ha recibido de la versión del objeto de datos asociado en el sitio correspondiente al otro elemento.
En una realización, cada elemento de un vector de versión se establece en algún valor inicial (por ejemplo, cero). Cuando un sitio cambia una o más propiedades de un objeto de datos en una transacción de base de datos frente a la copia del sitio del cuerpo de datos, el sitio incrementa su propio reloj lógico en el vector de versión asociado con el objeto de datos en un valor fijo (por ejemplo, uno). Al compartir el cambio con otros sitios como una actualización, el sitio incluye en la actualización datos que representan el cambio al objeto de datos y datos que representan el vector de versión del sitio para el objeto de datos después del incremento. Un sitio que recibe la actualización puede comparar el vector de versión en la actualización con su propio vector de versión para el objeto de datos para determinar si la versión del objeto de datos en el sitio receptor y la versión del objeto de datos en la actualización son (1) idénticos, están (2) ordenados o son (3) concurrentes.
Se pueden usar técnicas conocidas para comparar dos vectores de versión para determinar si las dos versiones son idénticas, están ordenadas o son concurrentes. En una realización, comparar dos vectores de versión incluye comparar cada elemento en un vector de versión con el elemento correspondiente en el otro vector de versión. La correspondencia entre elementos se determina en función del sitio al que corresponden los elementos. En particular, el elemento para un sitio en un vector de versión se compara con el elemento para el mismo sitio en el otro vector de versión. Dos versiones son idénticas si cada elemento en un vector de versión es igual al elemento correspondiente en el otro vector de versión. Las dos versiones están ordenadas si una versión "sucedió antes" que la otra. El vector A de versión sucedió antes del vector B de versión si cada elemento en el vector B de versión es mayor o igual que el elemento correspondiente en el vector A de versión y al menos un elemento en el vector B de versión es mayor que el elemento correspondiente en el vector A de versión. De manera similar, el vector B de versión ocurrió antes del vector A de versión si cada elemento en el vector A de versión es mayor o igual al elemento correspondiente en el vector B de versión y al menos un elemento en el vector A de versión es mayor que el elemento correspondiente en el vector B de versión. Dos versiones son concurrentes si no son idénticas ni están ordenadas.
Compartición de cambios en objetos de datos utilizando vectores de versión por objeto
La FIG. 3 ilustra un método 300 para compartir un cambio de datos en un objeto de datos en un sistema de bases de datos multimaestro usando vectores de versión por objeto, según una realización de la invención. Como se muestra, el método 300 comienza en el paso 305 donde un sitio realiza un cambio en una copia local de un objeto de datos almacenado en la copia del cuerpo de datos del sitio. Por ejemplo, un usuario puede usar una aplicación de base de datos en el sitio para agregar, eliminar o editar una o más propiedades del objeto de datos.
En una realización, como parte del cambio de un objeto de datos en un sitio, cada cambio da como resultado una nueva versión del objeto de datos en el sitio. En el paso 310, el reloj lógico local del sitio en el vector de versión para el objeto de datos se incrementa en un valor fijo (por ejemplo, uno) para reflejar la nueva versión del objeto de datos en el sitio donde se realizó el cambio. Los otros elementos en el vector de versión no se incrementan.
En una realización, cada cambio a un objeto de datos en un sitio se comparte con cualquier otro sitio en el sistema. Dependiendo de la topología del sistema multimaestro (por ejemplo, de malla completa o de malla parcial), un sitio que realiza un cambio puede comunicarse con cualquier otro sitio para compartir el cambio, o solo con un subconjunto de ellos que son responsables de comunicar el cambio con otros sitios. En el paso 315, el cambio realizado en el paso 305 se comparte con al menos otro sitio en el sistema. Compartir el cambio incluye enviar, al menos a otro sitio, datos que representan el cambio y datos que representan el vector de versión para el objeto de datos modificado después del incremento en el paso 310.
En una realización, los datos que representan el cambio incluyen un identificador del objeto de datos y una representación materializada del objeto de datos que incluye todas las propiedades del objeto de datos. En otra realización, los datos que representan el cambio incluyen un identificador del objeto de datos pero solo las propiedades del objeto de datos afectadas por el cambio. Los datos que representan el vector de versión para el objeto de datos modificado no necesitan incluir una representación de cada elemento del vector de versión y, en una realización práctica, los datos que representan solo un subconjunto de todos los elementos posibles del vector de versión se comparten con al menos otro sitio.
Detección y resolución de conflictos que involucran cambios en objetos de datos utilizando vectores de versión por objeto
La FIG. 4 ilustra un método 400 para detectar y resolver un conflicto que involucra cambios concurrentes en un objeto de datos usando vectores de versión por objeto, según una realización de la invención. Como se muestra, el método 400 comienza en el paso 405 donde un sitio recibe una actualización para un objeto de datos desde otro sitio. La actualización incluye datos que representan un cambio en el objeto de datos, incluido un identificador del objeto de datos modificado y datos que representan el vector de versión del objeto de datos modificado. El vector de versión representa la versión del objeto de datos en el sitio que realizó el cambio inmediatamente después de que se realizó el cambio. Para mayor claridad de la explicación, el vector de versión del objeto de datos modificado recibido en la actualización se denominará el vector de versión del sitio de cambio del objeto de datos.
En el paso 410, el sitio que recibe la actualización obtiene localmente su vector de versión para el objeto de datos basado en el identificador del objeto de datos incluido en la actualización y compara su vector de versión con el vector de versión del sitio de cambio para determinar si las dos versiones son idénticas, están ordenadas o son concurrentes. Como se mencionó anteriormente, esta comparación incluye comparar el vector de versión del sitio de cambio con el vector de versión del sitio receptor elemento a elemento.
En el paso 415, se determina si la versión del sitio de cambio del objeto de datos recibido en la actualización y el vector de versión del sitio receptor del objeto de datos son concurrentes. Si las dos versiones son concurrentes, se ha detectado un conflicto. Es decir, la versión del objeto de datos en el sitio receptor refleja un cambio en el objeto de datos realizado sin conocimiento del cambio recibido en la actualización y la versión del objeto de datos recibido en la actualización refleja un cambio en el objeto de datos realizado sin conocimiento del cambio del que el sitio receptor tiene conocimiento. Si se detecta un conflicto, entonces el método 400 procede al paso 420 donde los cambios concurrentes que resultan en el conflicto se resuelven bien automática o bien manualmente.
En el paso 420, se realiza una determinación inicial si el conflicto puede resolverse automáticamente. En una realización, determinar si un conflicto se puede resolver automáticamente se basa en un conjunto de heurística y/o de reglas de resolución de conflictos. El conjunto de heurística y/o de reglas de resolución de conflictos puede ser definido por el usuario. Por ejemplo, en una realización, determinar si un conflicto se puede resolver automáticamente incluye determinar si los cambios concurrentes involucran cambios en propiedades no superpuestas o en tipos de propiedades no superpuestas del objeto de datos. Por ejemplo, si el cambio recibido en la actualización es en una propiedad de Número de teléfono de un objeto de datos en particular de Persona y el cambio del que tiene conocimiento el sitio receptor es en una propiedad de Dirección del objeto de datos en particular, entonces el sistema puede determinar automáticamente que ambos cambios se pueden aceptar. En una realización, las propiedades no superpuestas se detectan en el sitio receptor al realizar una comparación propiedad a propiedad entre la versión del sitio de cambio del objeto de datos recibido en la actualización y la versión del objeto de datos del sitio receptor.
Si el conflicto no se puede resolver automáticamente, entonces el sitio receptor mantiene la actualización en una cola de actualizaciones pendientes del objeto de datos hasta que se pueda resolver el conflicto con la ayuda de la entrada del usuario. Por ejemplo, el sitio receptor puede no ser capaz de resolver automáticamente un conflicto si los cambios concurrentes involucran cambios en la misma propiedad de un objeto de datos. Por ejemplo, si el cambio recibido en la actualización es en una propiedad de Número de teléfono de un objeto de datos en particular de Persona y el cambio en el objeto de datos del que el sitio receptor tiene conocimiento es también en la propiedad de Número de teléfono de un objeto de datos en particular, entonces es posible que el sitio receptor pueda no ser capaz de resolver el conflicto automáticamente. Si bien una actualización de un objeto de datos permanece en la cola de actualizaciones pendientes del sitio receptor del objeto de datos, el sitio receptor puede continuar realizando cambios en el objeto de datos y aceptar y aplicar actualizaciones al objeto de datos recibidas de otros sitios hasta que el usuario descarte o acepte la actualización.
En una realización, para ayudar a un usuario a tomar una decisión de resolución de conflictos informada al resolver manualmente un conflicto que involucra cambios concurrentes en un objeto de datos, el sitio de resolución de conflictos determina el predecesor común más cercano en el sitio de resolución de conflictos de (a) la versión de los datos objeto en la cola de actualizaciones pendientes en el sitio de resolución de conflictos (versión pendiente) y (b) la versión actual del objeto de datos en el sitio de resolución de conflictos (versión actual). El predecesor común más cercano de estas dos versiones se determina como la versión más reciente del objeto de datos en el sitio de resolución de conflictos que está ordenado antes (es decir, sucedió antes) tanto de (a) la versión pendiente del objeto de datos como de (b) la actual versión del objeto de datos de acuerdo a sus respectivos vectores de versión. Una aplicación en el sitio de resolución de conflictos utiliza la información del predecesor común más cercano para presentar al usuario las diferencias entre ambas: (1) la versión del predecesor común más cercano del objeto de datos y la versión pendiente y (2) la versión de predecesor común más cercano y la versión actual. Por ejemplo, la aplicación puede presentar una interfaz gráfica de usuario que proporcione una indicación visual de las diferencias en cuanto a las propiedades de modo que un usuario pueda comprender la naturaleza de los cambios simultáneos e indicar qué versión del objeto de datos es correcta. En función de la presentación de las diferencias (1) y (2), el usuario puede determinar cuál de las dos versiones del objeto de datos es la versión correcta del objeto de datos y proporcionar una indicación a través de la aplicación de la versión seleccionada.
En el paso 425, la resolución de conflictos de los cambios concurrentes en el paso 420 da como resultado un cambio en la copia local del objeto de datos del sitio receptor. El cambio en el objeto de datos refleja el resultado de la resolución de conflictos. Por ejemplo, si se determinó en el paso 420 que los cambios simultáneos involucraron propiedades no superpuestas, entonces el cambio realizado en el objeto de datos en el paso 425 podría involucrar la modificación de la copia local del objeto de datos del sitio receptor para incorporar las propiedades no superpuestas modificadas recibidas en la actualización.
Después de que se realiza el cambio en la copia local del objeto de datos del sitio receptor, en el paso 430, el vector de versión del sitio de cambio del objeto de datos se unifica con el vector de versión del sitio receptor del objeto de datos. La unificación de los dos vectores de versión incluye la unificación de cada elemento en el vector de versión del sitio de cambio del objeto de datos con el elemento correspondiente en el vector de versión del sitio receptor del objeto de datos. Unificar dos elementos incluye elegir el numéricamente mayor de los dos elementos como el valor del elemento en el nuevo vector de versión. Lo que se produce mediante esta unificación en el paso 430 es un nuevo vector de versión que se ordena después del vector de versión del sitio receptor del objeto de datos y el vector de versión del sitio de cambio del objeto de datos. Dicho de otro modo, el vector de versión del sitio receptor del objeto de datos y el vector de versión del sitio de cambio ahora ocurrieron ambos antes del nuevo vector de versión. Después de que los dos vectores de versión se unifican, el vector de versión del sitio receptor del objeto de datos se reemplaza con el nuevo vector de versión que luego se convierte en el vector de versión del objeto de datos en el sitio receptor.
El paso 435 es similar a una combinación de los pasos 310 y 315 del método 300. En el paso 435, el reloj lógico del sitio receptor en el vector de versión del objeto de datos se incrementa en un valor fijo (por ejemplo, uno) para reflejar el cambio realizado en el paso 425 como resultado de la resolución de conflictos en el paso 420. Los otros elementos en el vector de versión no se incrementan. Además, en el paso 430, los cambios en la copia del objeto de datos del sitio receptor se comparten con otros sitios en el sistema.
Si, en el paso 415, el sitio receptor determina que el vector de versión del sitio de cambio del objeto de datos y el vector de versión del sitio receptor del objeto de datos son idénticos o están ordenados (es decir, no son concurrentes), entonces, en el paso 440, el sitio receptor bien incorpora la actualización en la copia local del objeto de datos del sitio receptor o bien descarta la actualización. En una realización, el sitio receptor incorpora la actualización en la copia local del objeto de datos del sitio receptor si el vector de versión del sitio receptor del objeto de datos está ordenado antes (es decir, sucedió antes) del vector de versión del sitio de cambio del objeto de datos. La incorporación de la actualización en la copia local del objeto de datos del sitio receptor incluye la sobrescritura de la información del objeto de datos en la copia local del sitio receptor con los cambios de sustitución del objeto de datos incluidos en la actualización. En una realización, el sitio receptor descarta la actualización si el vector de versión del sitio receptor del objeto de datos es idéntico al vector de versión del sitio de cambio del objeto de datos. El sitio receptor también puede descartar la actualización si el vector de versión del sitio de cambio para el objeto de
datos está ordenado antes (es decir, sucedió antes) del vector de versión del sitio receptor del objeto de datos. En este último caso, la actualización representa un cambio antiguo que ya se incorporó y fue reemplazado por la versión del sitio de recepción del objeto de datos.
Si, en el paso 435, la actualización se incorporó a la copia local del sitio de recepción del objeto de datos, entonces, en el paso 450, el vector de versión del sitio de cambio del objeto de datos se unifica con el vector de versión del sitio de recepción del objeto de datos para producir una nueva versión del vector del objeto de datos en el sitio receptor. El paso 450 es similar al paso 430. Sin embargo, a diferencia del caso en el que la actualización recibida del objeto de datos está en conflicto con la versión del sitio de recepción del objeto de datos, el nuevo vector de versión del objeto de datos en el sitio de recepción no se incrementa después de unificar el vector de versión del sitio receptor del objeto de datos y el vector de versión del sitio de cambio del objeto de datos.
El método 300 y el método 400 de las figuras 3 y 4 se explicarán ahora adicionalmente con un ejemplo con referencia a la FIG. 5. La FIG. 5 ilustra un ejemplo de intercambio y resolución de conflictos de los cambios de datos en el sistema 100 multimaestro. El tiempo lógico avanza hacia abajo desde la parte superior de la figura hasta la parte inferior a medida que tienen lugar los acontecimientos en los sitios 101, 102 y 103. Como se muestra, cada sitio 101, 102, y 103 inicialmente tiene copias idénticas del mismo objeto de datos. El objeto de datos tiene dos atributos: un atributo Tipo y un atributo Nombre. El atributo Tipo se establece en el valor "Persona" y el atributo Nombre se establece en el valor "J. S." en cada copia del objeto de datos en cada sitio. Además, cada sitio 101, 102 y 103 guarda un vector de versión del objeto de datos. Inicialmente, los vectores de versión son idénticos (es decir, <1, 0, 0>) lo que refleja que cada sitio tiene la misma versión del objeto de datos. Cada vector de versión tiene tres elementos, uno para cada sitio 101, 102 y 103. En el ejemplo representado en la FIG. 5, el primer elemento (más a la izquierda) de cada vector de versión corresponde al sitio 101, el segundo elemento (en el medio) de cada vector de versión corresponde al sitio 102, y el tercer elemento (más a la derecha) de cada vector de versión corresponde al sitio 103.
En el acontecimiento 503 en el sitio 101, se realiza un cambio local en la copia del objeto de datos del sitio 101. En particular, se cambia la propiedad Nombre de "J. S." a "John Smith". De acuerdo con el paso 310 del método 300, el reloj lógico del sitio 101 del objeto de datos se incrementa en un valor fijo. En el ejemplo, el reloj lógico del sitio 101 en el vector de versión del objeto de datos se incrementa de 1 a 2.
De acuerdo con el paso 315 del método 300, en el acontecimiento 505, el sitio 101 comparte el cambio a su copia del objeto de datos con el sitio 102. En particular, se envía una actualización desde el sitio 101 al sitio 102. En una realización, la actualización incluye un identificador del objeto de datos, datos que representan el cambio realizado y datos que representan el vector de versión del sitio 101 del objeto de datos (por ejemplo, <2, 0, 0>).
En el acontecimiento 507, la actualización enviada desde el sitio 101 se recibe en el sitio 102. De acuerdo con el paso 410 del método 400, el vector de versión para el objeto de datos recibido en la actualización <2, 0, 0> se compara con el vector de versión actual del sitio 102 del objeto de datos <1, 0, 0>. Dicha comparación revela que el vector de versión del sitio 102 ocurrió antes (está ordenado antes) del vector de versión del sitio 101. Por lo tanto, la actualización recibida en el sitio 102 que refleja el cambio realizado en el sitio 101 no entra en conflicto con la versión del objeto de datos del sitio 102. De acuerdo con el paso 440 del método 400, el sitio 102 incorpora el cambio recibido en la actualización en su copia local del objeto de datos con el cambio recibido en la actualización reemplazando cualquier propiedad diferente de la copia del objeto de datos del sitio 102. En particular, el valor de la propiedad Nombre en la copia del objeto de datos del sitio 102 se cambia de "J. S." a "John Smith". De acuerdo con el paso 450 del método 400, el vector de versión del sitio 101 del objeto de datos recibido en la actualización se unifica con el vector de versión del sitio 102 para producir un nuevo vector de versión del objeto de datos en el sitio 102 de <2, 0, 0>.
En el acontecimiento 509, la actualización del sitio 101 es propagada por el sitio 102 al sitio 103. En una realización, el sitio 102 está configurado para realizar tal propagación como parte de una topología de replicación multimaestro en cascada o de malla parcial. En una realización alternativa, en lugar de confiar en el sitio 102 para propagar la actualización, el sitio 101 comunica la actualización tanto al sitio 102 como al sitio 103 como parte de una topología de replicación multimaestro de malla completa. En el acontecimiento 511, el sitio 103 recibe la actualización e incorpora la actualización en su copia local del objeto de datos y combina vectores de versión realizando pasos similares a aquellos realizados por el sitio 102 en el acontecimiento 507.
El acontecimiento 513 y el acontecimiento 515 representan cambios concurrentes en el objeto de datos. En particular, en el sitio 102 se agrega una propiedad Número de teléfono al objeto de datos. En el sitio 103, se agrega una propiedad Dirección al objeto de datos. De acuerdo con el paso 310 del método 300, el sitio 102 y el sitio 103 incrementan los dos su reloj lógico del objeto de datos. En el acontecimiento 517, el sitio 102 envía una actualización al sitio 103 que refleja la adición de la propiedad Número de teléfono. En el acontecimiento 519, el sitio 103 envía una actualización al sitio 102 que refleja la adición de la propiedad Dirección. Aunque no se muestra en la Figura 5, los sitios 102 y 103 también pueden comunicar actualizaciones a otros sitios en el sistema (por ejemplo, al sitio 101). En el acontecimiento 521, el sitio 102 recibe la actualización enviada desde el sitio 103 y detecta el conflicto. En particular, el vector de versión recibido en la actualización del sitio 103 (es decir, <2, 0, 1>) no es idéntico ni está
ordenado antes o después del vector de versión del objeto en el sitio 102 (es decir, <2, 1, 0>). De acuerdo con el paso 420 del método 400, el sitio 102 intenta resolver el conflicto automáticamente en función de un conjunto preestablecido de heurística y/o de reglas de resolución de conflictos. En el ejemplo de la figura 5, el sitio 102 compara su copia del objeto de datos con la versión del objeto de datos recibida en la actualización y determina que los cambios concurrentes involucran cambios en propiedades no superpuestas. Por lo tanto, en el acontecimiento 512, el sitio 102 determina que el conflicto se puede resolver automáticamente y actualiza su copia local del objeto de datos en consecuencia. En particular, la propiedad Dirección recibida en la actualización se agrega a la copia local del sitio 102 del objeto de datos. Además, de acuerdo con el paso 430 del método 400, el vector de versión del sitio 102 del objeto de datos se unifica con el vector de versión del sitio 103 del objeto de datos recibido en la actualización y el vector de versión resultante se convierte en el nuevo vector de versión del objeto de datos en el sitio 102. Luego, de acuerdo con el paso 435 del método 400, el sitio 102 incrementa su reloj lógico en el vector de versión del objeto de datos en uno para producir un nuevo vector de versión del objeto de datos en el sitio 102 de <2, 2, 1>.
En el acontecimiento 523, el sitio 103 realiza un proceso similar al que realiza el sitio 102 en el acontecimiento 521. Evitación de actualizaciones repetitivas innecesarias
Después del acontecimiento 521 en el sitio 102 y después del acontecimiento 523 en el sitio 103, el sitio 102 y el sitio 103 tienen las dos copias idénticas del objeto de datos. Sin embargo, el sitio 102 y el sitio 103 tienen diferentes vectores de versión del objeto de datos. En el ejemplo, el sitio 102 tiene un vector de versión del objeto de datos de <2, 2, 1> y el sitio 103 tiene un vector de versión del objeto de datos de <2, 1, 2>. De acuerdo con el paso 435 del método 400, el sitio 102 y el sitio 103 pueden enviarse una actualización entre sí reflejando sus respectivas operaciones de resolución de conflictos automáticas realizadas en los acontecimientos 521 y 523 respectivamente. Cuando las reciba el otro sitio, estas actualizaciones se detectarán como un conflicto. Por ejemplo, el vector de versión del sitio 102 <2, 2,1> no es idéntico, ni está ordenado antes o después que el vector de versión del sitio 103 <2, 1, 2>. Si no se toman medidas correctivas, el sitio 102 y el sitio 103 repetida e innecesariamente resolverán el conflicto, incrementarán sus relojes lógicos del objeto de datos y se enviarán actualizaciones entre sí a pesar de que ambos sitios tienen copias idénticas del objeto de datos.
En una realización, para evitar actualizaciones repetitivas innecesarias, en el paso 420 del método 400, después de que se haya detectado un conflicto, se realiza una comparación entre la versión del objeto de datos recibido en la actualización y la versión del objeto de datos del sitio receptor. Si las dos versiones son idénticas, entonces solo se realiza una unificación de los dos vectores de versión (paso 430). La copia local del sitio de recepción del objeto de datos no se cambia y el reloj lógico del sitio de recepción en el vector de versión del objeto de datos no se incrementa (es decir, no se realizan los pasos 425 y 435). En una realización, esta comparación incluye una comparación propiedad a propiedad entre las dos versiones del objeto de datos.
Por ejemplo, volviendo a la FIG. 5, en el acontecimiento 529, el sitio 102 recibe una actualización del sitio 103 que indica que el sitio 103 agregó la propiedad de Número de teléfono a su copia del objeto de datos e incluye su vector de versión actual del objeto de datos de <2, 1, 2>. Al recibir esta actualización, el sitio 102 detecta un conflicto porque su vector de versión <2, 2, 1> no es idéntico ni está ordenado antes o después del vector de versión del sitio 103 <2, 1, 2>. El sitio 102 compara su versión del objeto de datos con la versión del objeto de datos recibida en la actualización del sitio 103. Al determinar que las versiones son idénticas (es decir, ambas versiones tienen las mismas propiedades con los mismos valores), el sitio 102 unifica los dos vectores de versión para producir un nuevo vector de versión del objeto de datos en el sitio 102 de <2, 2, 2>. El sitio 103 realiza un proceso similar en el acontecimiento 531 para llegar al mismo vector de versión <2, 2, 2>. Ahora que ambos vectores de versión son idénticos, ya no se puede detectar un conflicto y las actualizaciones relacionadas con la resolución de conflictos previa ya no son propagadas por los sitios.
Vectores de versión por conjunto de vínculos
En una realización, se hace una versión de los vínculos que conectan dos objetos de datos distinta e independientemente de los objetos de datos conectados por los vínculos. En particular, el conjunto de vínculos que conectan dos objetos está asociado con su propio vector de versión distinto de los vectores de versión asociados con los dos objetos. Cada sitio guarda un vector de versión para cada conjunto de vínculos. Los cambios en un conjunto de vínculos en un sitio, incluyendo la adición de un vínculo al conjunto o la eliminación de un vínculo del conjunto, hacen que el sitio incremente su reloj lógico local del conjunto de vínculos y que el sitio comparta el cambio en el conjunto de vínculos con otros sitios. Los vectores de versiones asociados con copias de un conjunto de vínculos en los sitios se pueden usar para detectar y resolver conflictos que involucren cambios concurrentes en dos copias diferentes del mismo conjunto de vínculos de una manera similar a la descrita anteriormente de cómo se pueden usar los vectores de versión por objeto para detectar y resolver conflictos que involucren cambios concurrentes en dos copias diferentes del mismo objeto de datos.
Además, los vectores de versión por conjunto de vínculos permiten a los sitios incorporar automáticamente un cambio concurrente que incluye un cambio en un conjunto de vínculos y un cambio en un objeto de datos conectado
a otro objeto de datos mediante el conjunto de vínculos. Por ejemplo, supóngase que el sitio A y el sitio B tienen la misma versión del objeto de datos X y la misma versión del objeto de datos Y. Además, supóngase que el vector de versión del sitio A del objeto de datos X es idéntico al vector de versión del sitio B del objeto de datos X y que el vector de versión del sitio A para el objeto de datos Y es idéntico al vector de versión del sitio B para el objeto de datos Y. Si se realiza un cambio local en el objeto de datos X en el sitio A (por ejemplo, al agregar una nueva propiedad), entonces el sitio A incrementa su reloj lógico local en el vector de versión del objeto de datos X y envía una actualización al sitio B. Supóngase que, antes de que el sitio B reciba la actualización con respecto al cambio en el objeto de datos X en el sitio A, se realiza un cambio local en el sitio B que vincula el objeto de datos X y el objeto de datos Y. Según una realización, esto hace que el sitio B incremente su reloj lógico local en el vector de versión del conjunto de vínculos que conecta los objetos de datos X e Y. Sin embargo, en este caso, el sitio B no incrementa su reloj lógico local ni del objeto de datos X ni del objeto de datos Y. El sitio B luego envía una actualización al sitio A que refleja el cambio en el conjunto de vínculos entre los objetos de datos X e Y. Al recibir la actualización desde el sitio B con respecto al cambio del conjunto de vínculos, el sitio A incorpora la actualización de tal manera que el objeto de datos X según ha sido modificado por el cambio en el sitio A se vincula al objeto de datos Y. Del mismo modo, al recibir la actualización desde el sitio A con respecto al cambio en el objeto de datos X, el sitio B incorpora la actualización de tal manera que el objeto de datos X según ha sido modificado por el cambio en el sitio A se vincula al objeto de datos Y. Después de que las actualizaciones se hayan compartido entre sí, tanto el sitio A como el sitio B tienen copias idénticas del objeto de datos X y del objeto de datos Y y copias idénticas de los conjuntos de vínculos de los objetos de datos X e Y conectados.
Este ejemplo se ilustra en la FIG. 6. Según se muestra, inicialmente el sitio A y el sitio B tienen la misma versión del objeto de datos X y la misma versión del objeto de datos Y. Los acontecimientos 603 y 605 representan cambios concurrentes. En particular, en el acontecimiento 603, se realiza un cambio local en el objeto de datos X en el sitio A. Por ejemplo, se realiza un cambio que involucra una propiedad del objeto de datos X. Al mismo tiempo, en el acontecimiento 605, se realiza un cambio local en el sitio B que vincula el objeto de datos X y el objeto de datos Y. Por ejemplo, si el objeto de datos X y el objeto de datos Y representan a una persona en particular, pueden vincularse a través de una relación de Amigo de. En el acontecimiento 607, el sitio A comparte su cambio en el objeto de datos X con el sitio B e incluye su vector de versión del objeto de datos X <2, 0, 0> en su actualización. En el acontecimiento 609, el sitio B comparte su cambio en el conjunto de vínculos X-Y e incluye su vector de versión del conjunto de vínculos X-Y <1, 0, 0> en su actualización. Ambos sitios reciben e incorporan actualizaciones de cada uno en sus respectivas copias de la base de datos en los acontecimientos 611 y 613. Obsérvese que en este ejemplo no se detecta ningún conflicto entre los cambios concurrentes porque se hace una versión del conjunto de vínculos que conectan los objetos de datos X e Y distinta e independientemente de los objetos de datos X e Y mismos.
Uso de vectores de versión por objeto para detectar conflictos en la resolución de objetos
Como se mencionó, algunos sistemas de bases de datos pueden admitir "resolución de objetos". La resolución de objetos involucra a un usuario o a un proceso informático automatizado que determina que dos o más objetos de datos distintos realmente representan la misma entidad del mundo real e invoca una función del sistema de bases de datos para que los objetos de datos distintos se agrupen en un único objeto de datos. Por ejemplo, supóngase que hay dos objetos de datos distintos, uno con un valor de propiedad de Nombre de "John Smith", el otro con un valor de propiedad de Nombre de "J. S.". Un usuario puede decidir que estos dos objetos de datos representan la misma persona del mundo real. En consecuencia, en un sistema de bases de datos que admite la resolución de objetos, el usuario puede invocar una función del sistema de bases de datos para que los dos objetos de datos distintos se resuelvan en un único objeto de datos que tenga un valor de propiedad de nombre de "John Smith" o de "J. S." según lo seleccionado por el usuario que resuelve los objetos.
En los sistemas de bases de datos multimaestro que emplean replicación asíncrona, sería deseable detectar como un conflicto cambios concurrentes que incluyen un cambio en la resolución del objeto. Por ejemplo, supóngase que en la base de datos A, el usuario 1 cambió la propiedad del color del cabello de un objeto de datos que representa a una persona llamada "J. S." de "castaño" a "rubio". Además, supóngase que antes de que el cambio de color del cabello realizado por el usuario 1 pueda propagarse desde la base de datos A a la base de datos B, el usuario 2 cambia la base de datos B resolviendo el objeto de datos que representa "J. S." juntándolo con otro objeto de datos que representa a una persona llamada "John Smith". Sería deseable que el sistema de bases de datos multimaestro detecte estos dos cambios concurrentes como un conflicto ya que el usuario 2 pudiera no haber decidido resolver "J. S." y "John Smith" juntándolos si el usuario 2 hubiera sabido que el color del cabello de John Smith fue cambiado por el usuario 1. De manera similar, el usuario 1 pudiera no haber decidido cambiar el color del cabello de "J. S." si el usuario 1 hubiera sabido que el usuario 2 resolvió "J. S." y "John Smith" juntándolos.
En una realización, los vectores de versión por objeto se usan para detectar como conflicto un cambio concurrente que involucra un cambio en la resolución del objeto. En particular, cuando un sitio resuelve dos o más objetos juntándolos, el sitio incrementa cada reloj lógico local en el sitio en cada vector de versión de cada objeto de datos resuelto al juntarlo. La resolución de los objetos de datos se comparte luego como una actualización con otros sitios. La actualización incluye los vectores de versión resultantes del sitio de intercambio de cada uno de los objetos de datos que se resolvieron juntándolos.
Según una realización, un sitio que recibe la actualización detecta un conflicto comparando cada vector de versión de cada objeto de datos en la actualización de la resolución del objeto con su vector de versión del objeto de datos correspondiente. Si alguno de los vectores de versión es concurrente, se detecta un conflicto. La resolución de los objetos se incorpora a la copia de la base de datos del sitio receptor solo si todos y cada uno de los vectores de versión recibidos en la actualización es idéntico o está ordenado después del vector de versión correspondiente en el sitio receptor.
Como ejemplo, supóngase que el objeto de datos X en el sitio 101 de la FIG. 1 tiene el vector de versión <1, 0, 0> y el objeto de datos Y en el sitio 101 tiene el vector de versión <1, 0, 0>. Cuando los objetos de datos X e Y se resuelven juntándolos en el sitio 101, cada reloj lógico de los objetos de datos X e Y en el sitio 101 se incrementa en un valor fijo (por ejemplo, uno) dando un vector de versión en el sitio 101 de <2, 0, 0> del objeto de datos X y un vector de versión en el sitio 101 de <2, 0, 0> del objeto de datos Y. Cuando el cambio en la resolución del objeto en el sitio 101 es compartido por el sitio 101 con otros sitios (por ejemplo, con el sitio 102 y con el sitio 103), la actualización incluye datos que indican el cambio en la resolución del objeto (es decir, que los objetos de datos X e Y se resolvieron juntándolos) y los vectores de versión del sitio 101 de los objetos de datos que se resolvieron juntándolos (por ejemplo, <2, 0, 0> del objeto de datos X y <2, 0, 0> del objeto de datos Y). Además, supóngase que se realiza un cambio concurrente con el cambio en la resolución del objeto realizado en el sitio 101 en el objeto de datos X en el sitio 102, cambiando así el vector de versión del objeto de datos X en el sitio 102 de <1, 0, 0> a <1, 1, 0>. Por ejemplo, una propiedad del objeto de datos X se modifica en el sitio 102. Al recibir la actualización enviada desde el sitio 101 con respecto al cambio en la resolución del objeto, el sitio 102 detectará estos cambios concurrentes como un conflicto. Se detectará un conflicto en el sitio 102 porque un vector de versión para al menos un objeto de datos recibido en la actualización de la resolución del objeto desde el sitio 101 es concurrente con el vector de versión para el objeto de datos en el sitio 102. En particular, el vector de versión del objeto de datos X recibido en la actualización <2, 0, 0> es concurrente con el vector de versión del objeto de datos X en el sitio 102 <1, 1, 0>. En respuesta a la detección del conflicto, el sitio 102 puede intentar resolver el conflicto automáticamente conforme a las reglas predefinidas de heurística y/o de resolución de conflictos, o puede requerir la entrada por parte de un usuario para resolver el conflicto.
El tener conocimiento de la resolución de objetos ocurre después (RAHA)
En una realización, un sitio que recibe una actualización que involucra un cambio en un objeto de datos que se ha resuelto juntándolo en el sitio de recepción con uno o más de otros objetos de datos se aplicará en el sitio de recepción únicamente si todos y cada uno de los objetos de datos resueltos al juntarlos en el sitio receptor están disponibles en la actualización. Si todos y cada uno de los objetos de datos no están disponibles en la actualización, entonces la actualización puede colocarse en la cola de actualizaciones pendientes del sitio receptor. Un proceso en el sitio receptor inspecciona periódicamente la cola de actualizaciones pendientes en busca de actualizaciones que, cuando se combinan, incluyen todos y cada uno de los objetos de datos resueltos al juntarlos en el sitio receptor. Si el proceso de inspección descubre dicha combinación, entonces las actualizaciones se pueden aplicar atómicamente en combinación en el sitio receptor.
Por ejemplo, considérense los siguientes acontecimientos que tienen lugar en el sistema 100 de la figura 1:
(1) Tanto el sitio 101 como el sitio 102 tienen copias de los objetos de datos X, Y y Z cada uno en la versión <1, 0, 0>. Además, los objetos de datos X, Y y Z se resuelven juntándolos tanto en el sitio 101 como en el sitio 102.
(2) En el sitio 101, el objeto de datos X no se resuelve de los objetos de datos Y y Z. Cada vector de versión en el sitio 101 se incrementa de tal manera que cada objeto de datos X, Y y Z tiene ahora la versión <2, 0, 0> en el sitio 101.
(3) El sitio 101 envía una actualización al sitio 102 que incluye datos que representan el objeto de datos X en la versión <2, 0, 0> y datos que representan la resolución de los objetos de datos Y y Z cada uno en la versión <2, 0, 0>.
(4) El sitio 102 recibe la actualización del sitio 101 y la coloca en su cola de actualizaciones pendientes. La actualización se coloca en la cola de actualizaciones pendientes porque ni el objeto de datos X en la versión <2, 0, 0> ni la resolución de los objetos de datos Y y Z en la versión <2, 0, 0> incluyen todos los objetos de datos en la resolución de objetos de datos X, Y y Z cada uno en la versión <1, 0, 0> en el sitio 102.
(5) Un proceso de inspección en el sitio 102 inspecciona la cola de actualizaciones pendientes en busca de actualizaciones que, cuando se combinan, incluyen todos y cada uno de los objetos de datos X, Y y Z resueltos al juntarlos en el sitio 102. El proceso de inspección encuentra las actualizaciones recibidas desde el sitio 102 en las actualizaciones pendientes de los objetos de datos X, Y y Z y las aplica a la copia del sitio 102 de los datos del cuerpo después de lo cual tanto el sitio 101 como el sitio 102 tienen el objeto de datos X en la versión <2, 0, 0> sin resolver a partir de los objetos de datos Y y Z resueltos, cada uno en la versión <2, 0, 0>.
Vectores de versión por reconocimiento global de sitio
En una realización, para ayudar a determinar qué cambios deberían compartirse con otros sitios en el sistema, cada sitio guarda un único vector de versión de reconocimiento global que el sitio comparte periódicamente con otros sitios en el sistema. El vector de versión de reconocimiento global de un sitio refleja una unificación de todos los vectores de versión de todos los cambios aplicados con éxito a la copia local del sitio del cuerpo de datos compartido. Cuando un sitio de envío comparte un cambio con un sitio receptor, se garantiza que el sistema receptor ya ha recibido con éxito todos los cambios que están ordenados antes (es decir, que sucedieron antes) del vector de versión de reconocimiento global del sitio receptor. Por lo tanto, el sitio de envío no necesita enviar esos cambios que están ordenados antes (es decir, que sucedieron antes) al sitio de recepción del vector de versión de reconocimiento global del sitio de recepción.
En una realización, los cambios en la cola de actualizaciones pendientes en un sitio se comparten con otros sitios aunque las actualizaciones estén pendientes y aún no se hayan liberado de conflictos. Esto se hace para la corrección en sistemas en los que la topología de replicación es cíclica y/o dinámica. Por ejemplo, considérese el sistema 100 de la figura 1 en el que los tres sitios 101, 102 y 103 están configurados para compartir cambios entre sí. Considérense además los siguientes acontecimientos que tienen lugar en el sistema 100:
(1) El sitio 101 envía al sitio 102 una actualización del objeto de datos A en la versión <1, 0, 0> y una actualización del objeto de datos B en la versión <1, 0, 0>.
(2) Simultáneamente con el acontecimiento (1), el sitio 102 edita el objeto A a la versión <0, 1, 0>.
(3) El sitio 102, al recibir la actualización del objeto B en la versión <1, 0, 0,> del sitio 101, aplica la actualización a su copia local del objeto B. El sitio 102, al recibir la actualización del objeto de datos A en la versión <1, 0, 0> del sitio 101, coloca la actualización en una cola de actualizaciones pendientes en el sitio 102.
(4) El sitio 102 envía al sitio 103 una actualización del objeto de datos A en la versión <0, 1, 0> y una actualización del objeto de datos B en la versión <1, 0, 0>.
(5) El sitio 103, al recibir la actualización del objeto B en la versión <1, 0, 0> del sitio 102, aplica la actualización a su copia local del objeto B. El sitio 103, al recibir la actualización del objeto de datos A en la versión <0, 1, 0> del sitio 102, aplica la actualización a su copia local del objeto A. El vector de versión de reconocimiento global del sitio 103 está en <1, 1, 0> como resultado de la unificación del vector de versión del objeto de datos A en la versión <0, 1, 0> y el vector de versión del objeto de datos B en la versión <1, 0, 0>.
En este ejemplo, si, en el acontecimiento (4), la actualización del objeto de datos A en la versión <1, 0, 0> en la cola de actualizaciones pendientes del sitio 102 no se comparte también con el sitio 103, entonces el sitio 103 puede no recibir nunca la actualización porque el vector de versión de reconocimiento global del sitio 103 indica que el sitio 103 ya ha recibido la actualización. Por lo tanto, según una realización, el sitio 102 en el acontecimiento (4) también compartirá con el sitio 103 la actualización en su cola de actualizaciones pendientes para el objeto de datos A en la versión <1, 0, 0>. Esto es así a pesar de que aún no se ha resuelto el conflicto en la actualización. En una realización, la actualización pendiente también se almacena en la cola de actualizaciones pendientes del sitio 103. En esta situación, el conflicto ahora se puede resolver en el sitio 102 o en el sitio 103.
Mecanismos de implementación: descripción general del hardware
Según una realización, las técnicas descritas en el presente documento se implementan mediante uno o más dispositivos informáticos de propósito especial. Los dispositivos informáticos de propósito especial pueden estar cableados para realizar las técnicas, o pueden incluir dispositivos electrónicos digitales tales como uno o más circuitos integrados específicos de aplicación (ASIC) o matrices de puertas programables en campo (FPGA) que se programan de manera persistente para realizar las técnicas, o pueden incluir uno o más procesadores de hardware de propósito general programados para realizar las técnicas conforme a las instrucciones del programa en firmware, en memoria, en otro almacenamiento o en una combinación. Dichos dispositivos informáticos de propósito especial también pueden combinar lógica cableada, ASIC o FPGA personalizados con programación personalizada para llevar a cabo las técnicas. Los dispositivos informáticos de propósito especial pueden ser sistemas informáticos de escritorio, sistemas informáticos portátiles, dispositivos portátiles, dispositivos de red o cualquier otro dispositivo que incorpore lógica de programa y/o cableada para implementar las técnicas.
Por ejemplo, la FIG. 7 es un diagrama de bloques que ilustra un sistema 700 informático sobre el cual se puede implementar una realización de la invención. El sistema 700 informático incluye un bus 702 u otro mecanismo de comunicación para comunicar información, y un procesador 704 de hardware acoplado con el bus 702 para procesar información. El procesador 704 de hardware puede ser, por ejemplo, un microprocesador de propósito general. El sistema 700 informático también incluye una memoria 706 principal, tal como una memoria de acceso aleatorio (RAM) u otro dispositivo de almacenamiento dinámico, acoplado al bus 702 para almacenar información e
instrucciones a ejecutar por el procesador 704. La memoria 706 principal también puede ser usada para almacenar variables temporales u otra información intermedia durante la ejecución de instrucciones a ejecutar por el procesador 704. Dichas instrucciones, cuando se almacenan en medios de almacenamiento accesibles para el procesador 704, convierten el sistema 700 informático en una máquina de propósito especial que está personalizada para realizar las operaciones especificadas en las instrucciones.
El sistema 700 informático incluye además una memoria 708 de solo lectura (ROM) u otro dispositivo de almacenamiento estático acoplado al bus 702 para almacenar información estática e instrucciones para el procesador 704. Se provee un dispositivo de almacenamiento 710, tal como un disco magnético o un disco óptico, y se acopla al bus 702 para almacenar información e instrucciones.
El sistema 700 informático puede estar acoplado a través del bus 702 a una pantalla 712, tal como un tubo de rayos catódicos (CRT), para mostrar información a un usuario del ordenador. Un dispositivo 714 de entrada, que incluye teclas alfanuméricas y otras teclas, está acoplado al bus 702 para comunicar información y selecciones de comandos al procesador 704. Otro tipo de dispositivo de entrada de usuario es el control 716 del cursor, tal como un ratón, una bola de seguimiento o teclas de dirección del cursor para comunicar información de dirección y selecciones de comandos al procesador 704 y para controlar el movimiento del cursor en la pantalla 712. Este dispositivo de entrada normalmente tiene dos grados de libertad en dos ejes, un primer eje (por ejemplo, x) y un segundo eje (por ejemplo, y), que permite que el dispositivo especifique posiciones en un plano.
El sistema 700 informático puede implementar las técnicas descritas en el presente documento utilizando lógica cableada, uno o más ASIC o FPGA, firmware y/o lógica de programa personalizados que, en combinación con el sistema informático, hace que el sistema 700 informático sea una máquina de propósito especial. Según una realización, las técnicas en el presente documento son realizadas por el sistema 700 informático en respuesta al procesador 704 que ejecuta una o más secuencias de una o más instrucciones contenidas en la memoria 706 principal. Dichas instrucciones pueden leerse en la memoria 706 principal desde otro medio de almacenamiento, tal como un dispositivo 710 de almacenamiento. La ejecución de las secuencias de instrucciones contenidas en la memoria 706 principal hace que el procesador 704 realice los pasos del proceso descritos en el presente documento. En realizaciones alternativas, se pueden usar circuitos cableados en lugar de o en combinación con instrucciones de software.
El término "medios no transitorios", según se usa en el presente documento, se refiere a cualquier medio que almacene datos y/o instrucciones que hagan que una máquina funcione de una manera específica. Dichos medios no transitorios pueden comprender medios no volátiles y/o medios volátiles. Los medios no volátiles incluyen, por ejemplo, discos ópticos o magnéticos, tales como el dispositivo 710 de almacenamiento. Los medios volátiles incluyen memoria dinámica, tal como la memoria 706 principal. Las formas comunes de medios no transitorios incluyen, por ejemplo, un disquete, un disco flexible, un disco duro, una unidad de estado sólido, una cinta magnética o cualquier otro medio de almacenamiento de datos magnéticos, un CD-ROM, cualquier otro medio de almacenamiento óptico de datos, cualquier medio físico con patrones de agujeros, una RAM, una PROM y EPROM, una FLASH-EPROM, una NVRAM, o cualquier otro chip o cartucho de memoria.
Los medios no transitorios son distintos pero pueden usarse junto con los medios de transmisión. Los medios de transmisión participan en la transferencia de información entre medios no transitorios. Por ejemplo, los medios de transmisión incluyen cables coaxiales, cables de cobre y fibra óptica, incluyendo los cables que componen el bus 702. Los medios de transmisión también pueden tomar la forma de ondas acústicas o de luz, tales como las generadas durante las comunicaciones de datos de ondas de radio e infrarrojos.
Varias formas de medios pueden estar involucradas en llevar una o más secuencias de una o más instrucciones al procesador 704 para su ejecución. Por ejemplo, las instrucciones pueden llevarse inicialmente en un disco magnético o unidad de estado sólido de un ordenador remoto. El ordenador remoto puede cargar las instrucciones en su memoria dinámica y enviar las instrucciones a través de una línea telefónica utilizando un módem. Un módem local para el sistema informático 700 puede recibir los datos en la línea telefónica y usar un transmisor de infrarrojos para convertir los datos en una señal de infrarrojos. Un detector de infrarrojos puede recibir los datos transportados en la señal infrarroja y los circuitos apropiados pueden colocar los datos en el bus 702. El bus 702 transporta los datos a la memoria 706 principal, desde la cual el procesador 704 recupera y ejecuta las instrucciones. Las instrucciones recibidas por la memoria 706 principal pueden almacenarse opcionalmente en el dispositivo 710 de almacenamiento antes o después de la ejecución por el procesador 704.
El sistema 700 informático también incluye una interfaz 718 de comunicación acoplada al bus 702. La interfaz 718 de comunicación proporciona un acoplamiento de comunicación de datos bidireccional a un enlace 720 de red que está conectado a una red 722 local. Por ejemplo, la interfaz 718 de comunicación puede ser una tarjeta de red digital de servicios integrados (ISDN), un módem por cable, un módem por satélite o un módem para proporcionar una conexión de comunicación de datos a un tipo correspondiente de línea telefónica. Como otro ejemplo, la interfaz 718 de comunicación puede ser una tarjeta de red de área local (LAN) para proporcionar una conexión de comunicación de datos a una LAN compatible. También se pueden implementar enlaces inalámbricos. En cualquier
implementación de este tipo, la interfaz de comunicación 718 envía y recibe señales eléctricas, electromagnéticas u ópticas que transportan flujos de datos digitales que representan diversos tipos de información.
El enlace 720 de red normalmente proporciona comunicación de datos a través de una o más redes a otros dispositivos de datos. Por ejemplo, el enlace 720 de red puede proporcionar una conexión a través de la red 722 local a un ordenador 724 anfitrión o al equipo de datos operado por un proveedor 726 de servicios de Internet (ISP). El ISP 726 a su vez proporciona servicios de comunicación de datos a través de la red mundial de comunicación de paquetes de datos ahora comúnmente conocida como "Internet" 728. La red 722 local e Internet 728 utilizan señales eléctricas, electromagnéticas u ópticas que transportan flujos de datos digitales. Las señales a través de las diversas redes y las señales en el enlace 720 de red y a través de la interfaz de comunicación 718, que transportan los datos digitales hacia y desde el sistema 700 informático, son formas ejemplares de medios de transmisión.
El sistema 700 informático puede enviar mensajes y recibir datos, incluido el código del programa, a través de la(s) red(es), del enlace 720 de red y de la interfaz 718 de comunicación. En el ejemplo de Internet, un servidor 730 podría transmitir un código solicitado para un programa de aplicación a través de Internet 728, del ISP 726, de la red 722 local y de la interfaz 718 de comunicación.
El código recibido puede ser ejecutado por el procesador 704 a medida que se recibe, y/o almacenado en el dispositivo 710 de almacenamiento, o en otro almacenamiento no volátil para su posterior ejecución.
En la especificación anterior, se han descrito realizaciones de la invención con referencia a numerosos detalles específicos que pueden variar de implementación a implementación. Por lo tanto, el indicador único y exclusivo de lo que es la invención, y que los solicitantes pretenden que sea la invención, es el conjunto de reivindicaciones que surgen de esta solicitud, en la forma específica en que se publican dichas reivindicaciones, incluida cualquier corrección posterior. Cualquier definición expresamente expuesta en el presente documento de los términos contenidos en dichas reivindicaciones regirá el significado de dichos términos tal como se utilizan en las reivindicaciones. Por lo tanto, ninguna limitación, elemento, propiedad, característica, ventaja o atributo que no se mencione expresamente en una reivindicación debe limitar el alcance de dicha reivindicación de ninguna manera. La especificación y los dibujos deben, por consiguiente, considerarse en un sentido ilustrativo más que restrictivo.
Claims (14)
1. Un método informático para compartir y resolver los conflictos de los cambios de datos en un sistema de bases de datos multimaestro que comprende una pluralidad de sitios (101, 102, 103), comprendiendo el método:
en un primer sitio de la pluralidad de sitios:
hacer (305) un primer cambio en un objeto (201) de datos en particular en una base de datos en el primer sitio para producir una primera versión del objeto de datos en particular, y
compartir (315) el primer cambio con uno o más sitios de la pluralidad de sitios;
en un segundo sitio de la pluralidad de sitios:
realizar un segundo cambio en el objeto de datos en particular en una base de datos en el segundo sitio para producir una segunda versión del objeto de datos en particular;
recibir (405) una actualización que refleja el primer cambio;
en donde la actualización incluye:
una identificación del objeto de datos en particular,
datos que reflejan el primer cambio en el objeto de datos en particular, y
un primer vector de versión que representa la primera versión del objeto de datos en particular;
obtener un segundo vector de versión de una base de datos en el segundo sitio, representando el segundo vector de versión la segunda versión del objeto de datos en particular;
comparar (415) el primer vector de versión con el segundo vector de versión para determinar si la primera versión del objeto de datos en particular y la segunda versión del objeto de datos en particular son idénticas, están ordenadas o son concurrentes;
en el primer sitio de la pluralidad de sitios:
realizar un tercer cambio en la base de datos en el primer sitio a un conjunto de uno o más vínculos que conectan dos objetos de datos, involucrando el tercer cambio agregar o eliminar uno o más vínculos del conjunto de vínculos, incluyendo los dos objetos de datos el objeto de datos en particular; y
compartir el tercer cambio con uno o más sitios de la pluralidad de sitios;
en el segundo sitio de la pluralidad de sitios:
realizar un cuarto cambio en la base de datos en el segundo sitio al conjunto de vínculos, involucrando el cuarto cambio agregar o eliminar uno o más vínculos del conjunto de vínculos;
recibir una actualización que refleja el tercer cambio;
en donde la actualización incluye:
una identificación del conjunto de vínculos,
datos que reflejan el tercer cambio, y
un tercer vector de versión que representa una versión del conjunto de vínculos en el primer sitio resultante del tercer cambio, siendo el tercer vector de versión distinto de los objetos de datos conectados por los vínculos; obtener un cuarto vector de versión de la base de datos en el segundo sitio, representando el cuarto vector de versión una versión del conjunto de vínculos en el segundo sitio resultante del cuarto cambio, siendo el cuarto vector de versión distinto de los objetos de datos conectados por los vínculos;
comparar el tercer vector de versión con el vector de la cuarta versión para determinar si la versión del conjunto de vínculos resultante del tercer cambio y la versión del conjunto de vínculos resultante del cuarto cambio son idénticas, están ordenadas o son concurrentes; y
actualizar el vector de la cuarta versión para incorporar el tercer cambio.
2. El método según la reivindicación 1, que comprende además:
en el segundo sitio:
en respuesta a la determinación de que la primera versión del objeto de datos en particular y la segunda versión del objeto de datos en particular son concurrentes, determinando si el primer cambio y el segundo cambio tienen diferentes propiedades del objeto de datos en particular; y
en respuesta a la determinación de que el primer cambio y el segundo cambio están en diferentes propiedades del objeto de datos en particular:
incorporar el primer cambio en la segunda versión del objeto de datos en particular en la base de datos en el segundo sitio para producir una tercera versión del objeto de datos en particular, unificando el primer vector de versión y el segundo vector de versión para producir un vector de versión unificado, e
incrementar un elemento en particular del vector de versión unificado para producir un vector de versión incrementado que representa la tercera versión del objeto de datos en particular, correspondiendo el elemento en particular a un reloj lógico del objeto de datos en particular en el segundo sitio.
3. El método según la reivindicación 1, que comprende además:
en el segundo sitio:
en respuesta a la determinación de que la primera versión del objeto de datos en particular y la segunda versión del objeto de datos en particular son concurrentes, colocar la actualización recibida en el segundo sitio en una cola de actualizaciones pendientes en el segundo sitio; y
recibir la entrada por parte de un usuario que selecciona como máximo una de entre (a) la primera versión del objeto de datos en particular o (b) la segunda versión del objeto de datos en particular como la versión correcta del objeto de datos en particular.
4. El método según la reivindicación 3, que comprende además:
en el segundo sitio:
en respuesta a la entrada por parte de un usuario que selecciona la primera versión del objeto de datos en particular como la versión correcta del objeto de datos en particular:
incorporar el primer cambio en la segunda versión del objeto de datos en particular en la base de datos en el segundo sitio para producir una tercera versión del objeto de datos en particular,
unificar el primer vector de versión y el segundo vector de versión para producir un vector de versión unificado, e incrementar un elemento en particular del vector de versión unificado para producir un vector de versión incrementado que representa la tercera versión del objeto de datos en particular, correspondiendo el elemento en particular a un reloj lógico del objeto de datos en particular en el segundo sitio.
5. El método según la reivindicación 2 o la 4, que comprende además:
en el primer sitio:
recibir una actualización en el primer sitio que refleja la tercera versión del objeto de datos en particular;
en donde la actualización recibida en el primer sitio incluye datos que representan el vector de versión incrementado; y
en respuesta a la recepción de la actualización en el primer sitio, unificar el primer vector de versión y el vector de versión incrementado recibido en la actualización para producir un vector de versión que representa la tercera versión del objeto de datos en particular.
6. El método según la reivindicación 1, que comprende además:
en el primer sitio de la pluralidad de sitios:
resolver dos o más objetos de datos juntándolos para producir un cambio en la resolución del objeto de datos en la base de datos en el primer sitio; y
compartir el cambio en la resolución del objeto de datos con uno o más sitios de la pluralidad de sitios;
en el segundo sitio de la pluralidad de sitios:
recibir una actualización que refleje el cambio en la resolución del objeto de datos realizado en el primer sitio; en donde la actualización incluye:
una identificación de cada uno de los dos o más objetos de datos,
datos que indican que los dos o más objetos de datos se resolvieron juntándolos, y
para cada uno de los dos o más objetos de datos, un vector de versión para el objeto de datos que refleja una versión del objeto de datos en el primer sitio;
comparar, para cada uno de los dos o más objetos de datos, el vector de versión del objeto de datos recibido en la actualización con un vector de versión en el segundo sitio del objeto de datos para determinar si el cambio en la resolución del objeto de datos y una versión del objeto de datos en el segundo sitio son idénticos, están ordenados o son concurrentes;
determinar, en función de la comparación, que el cambio en la resolución del objeto de datos es concurrente con una versión en el segundo sitio de al menos uno de los dos o más objetos de datos; y
en respuesta a la determinación de que el cambio en la resolución del objeto de datos es concurrente con una versión en el segundo sitio de al menos uno de los dos o más objetos de datos, determinar que el cambio en la resolución del objeto de datos entra en conflicto con una versión en el segundo sitio de al menos uno de los dos o más objetos de datos.
7. Un medio no transitorio, legible por ordenador, que almacena instrucciones ejecutables por procesador que, cuando se ejecutan, producen la ejecución del método según se ha definido en una cualquiera de las reivindicaciones 1 a 6.
8. Un sistema de bases de datos multimaestro que comprende:
uno o más dispositivos informáticos en un primer sitio de una pluralidad de sitios de replicación;
uno o más dispositivos informáticos en un segundo sitio de la pluralidad de sitios de replicación; comprendiendo los -uno o más- dispositivos informáticos en el primer sitio:
medios para realizar un primer cambio en un objeto de datos en particular en una base de datos en el primer sitio para producir una primera versión del objeto de datos en particular, y
medios para compartir el primer cambio con uno o más sitios de la pluralidad de sitios de replicación; comprendiendo los -uno o más- dispositivos informáticos en el segundo sitio:
medios para realizar un segundo cambio en el objeto de datos en particular en una base de datos en el segundo sitio para producir una segunda versión del objeto de datos en particular;
medios para recibir una actualización que refleje el primer cambio;
en donde la actualización incluye:
una identificación del objeto de datos en particular,
datos que reflejan el primer cambio en el objeto de datos en particular, y
un primer vector de versión que representa la primera versión del objeto de datos en particular;
medios para obtener un segundo vector de versión de una base de datos en el segundo sitio, representando el segundo vector de versión la segunda versión del objeto de datos en particular; y medios para comparar el primer
vector de versión con el segundo vector de versión para determinar si la primera versión del objeto de datos en particular y la segunda versión del objeto de datos en particular son idénticas, están ordenadas o son concurrentes; comprendiendo los -uno o más- dispositivos informáticos en el primer sitio de la pluralidad de sitios de replicación: medios para hacer un tercer cambio en la base de datos en el primer sitio a un conjunto de uno o más vínculos que conectan dos objetos de datos, involucrando el tercer cambio agregar o eliminar uno o más vínculos del conjunto de vínculos, incluyendo los dos objetos de datos el objeto de datos en particular; y
medios para compartir el tercer cambio con uno o más sitios de la pluralidad de sitios de replicación; comprendiendo los -uno o más- dispositivos informáticos en el segundo sitio de la pluralidad de sitios de replicación: medios para realizar un cuarto cambio en la base de datos en el segundo sitio en el conjunto de vínculos, involucrando el cuarto cambio agregar o eliminar uno o más vínculos del conjunto de vínculos;
medios para recibir una actualización que refleja el tercer cambio;
en donde la actualización incluye:
una identificación del conjunto de vínculos,
datos que reflejan el tercer cambio, y
un tercer vector de versión que representa una versión del conjunto de vínculos en el primer sitio resultante del tercer cambio, siendo el tercer vector de versión distinto de los objetos de datos conectados por los vínculos; medios para obtener un cuarto vector de versión de la base de datos en el segundo sitio, representando el cuarto vector de versión una versión del conjunto de vínculos en el segundo sitio resultante del cuarto cambio, siendo el cuarto vector de versión distinto de los objetos de datos conectados por los vínculos;
medios para comparar el vector de la tercera versión con el vector de la cuarta versión para determinar si la versión del conjunto de vínculos resultante del tercer cambio y la versión del conjunto de vínculos resultante del cuarto cambio son idénticas, están ordenadas o son concurrentes; y
medios para actualizar el vector de la cuarta versión para incorporar el tercer cambio.
9. El sistema según la reivindicación 8, comprendiendo además los -uno o más- dispositivos informáticos en el segundo sitio:
medios para determinar si el primer cambio y el segundo cambio están en diferentes propiedades del objeto de datos en particular.
10. El sistema según la reivindicación 9, comprendiendo además los -uno o más- dispositivos informáticos en el segundo sitio:
medios para incorporar el primer cambio en la segunda versión del objeto de datos en particular en la base de datos en el segundo sitio para producir una tercera versión del objeto de datos en particular;
medios para unificar el primer vector de versión y el segundo vector de versión para producir un vector de versión unificado; y
medios para incrementar un elemento en particular del vector de versión unificado para producir un vector de versión incrementado que representa la tercera versión del objeto de datos en particular, correspondiendo el elemento en particular a un reloj lógico del objeto de datos en particular en el segundo sitio.
11. El sistema según la reivindicación 10, comprendiendo además los -uno o más- dispositivos informáticos en el primer sitio:
medios para recibir una actualización en el primer sitio que refleja la tercera versión del objeto de datos en particular; en donde la actualización recibida en el primer sitio incluye datos que representan el vector de versión incrementado; y
medios para unificar el primer vector de versión y el vector de versión incrementado recibido en la actualización para producir un vector de versión que representa la tercera versión del objeto de datos en particular.
12. El sistema según la reivindicación 8, comprendiendo además los -uno o más- dispositivos informáticos en el segundo sitio:
medios para colocar la actualización recibida en el segundo sitio en una cola de actualizaciones pendientes en el segundo sitio; y
medios para recibir la entrada por parte de un usuario que selecciona como máximo una de entre (a) la primera versión del objeto de datos en particular o (b) la segunda versión del objeto de datos en particular como la versión correcta del objeto de datos en particular.
13. El sistema según la reivindicación 12, comprendiendo además los -uno o más- dispositivos informáticos en el segundo sitio:
medios para incorporar el primer cambio en la segunda versión del objeto de datos en particular en la base de datos en el segundo sitio para producir una tercera versión del objeto de datos en particular;
medios para unificar el primer vector de versión y el segundo vector de versión para producir un vector de versión unificado; y
medios para incrementar un elemento en particular del vector de versión unificado para producir un vector de versión incrementado que representa la tercera versión del objeto de datos en particular, correspondiendo el elemento en particular a un reloj lógico del objeto de datos en particular en el segundo sitio.
14. El sistema según la reivindicación 13, comprendiendo además los -uno o más- dispositivos informáticos en el primer sitio:
medios para recibir una actualización en el primer sitio que refleja la tercera versión del objeto de datos en particular; en donde la actualización recibida en el primer sitio incluye datos que representan el vector de versión incrementado; y
medios para unificar el primer vector de versión y el vector de versión incrementado recibido en la actualización para producir un vector de versión que representa la tercera versión del objeto de datos en particular.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/836,801 US8515912B2 (en) | 2010-07-15 | 2010-07-15 | Sharing and deconflicting data changes in a multimaster database system |
PCT/US2011/043794 WO2012009397A2 (en) | 2010-07-15 | 2011-07-13 | Sharing and deconflicting data changes in a multimaster database system |
Publications (1)
Publication Number | Publication Date |
---|---|
ES2788299T3 true ES2788299T3 (es) | 2020-10-21 |
Family
ID=45467725
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
ES11807426T Active ES2788299T3 (es) | 2010-07-15 | 2011-07-13 | Compartición y resolución de conflictos de cambios de datos en un sistema de bases de datos multimaestro |
Country Status (12)
Country | Link |
---|---|
US (2) | US8515912B2 (es) |
EP (2) | EP3680784B1 (es) |
AU (1) | AU2011279270B2 (es) |
CA (1) | CA2806954C (es) |
DK (1) | DK2593881T3 (es) |
ES (1) | ES2788299T3 (es) |
HU (1) | HUE049983T2 (es) |
LT (1) | LT2593881T (es) |
NZ (1) | NZ606233A (es) |
PL (1) | PL2593881T3 (es) |
PT (1) | PT2593881T (es) |
WO (1) | WO2012009397A2 (es) |
Families Citing this family (61)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8515912B2 (en) | 2010-07-15 | 2013-08-20 | Palantir Technologies, Inc. | Sharing and deconflicting data changes in a multimaster database system |
US8688749B1 (en) | 2011-03-31 | 2014-04-01 | Palantir Technologies, Inc. | Cross-ontology multi-master replication |
US8984409B2 (en) | 2010-03-12 | 2015-03-17 | Salesforce.Com, Inc. | Service cloud console |
US9215096B2 (en) | 2011-08-26 | 2015-12-15 | Salesforce.Com, Inc. | Computer implemented methods and apparatus for providing communication between network domains in a service cloud |
US10228986B2 (en) * | 2011-09-29 | 2019-03-12 | Agiledelta, Inc. | Interface-adaptive data exchange |
US8782004B2 (en) * | 2012-01-23 | 2014-07-15 | Palantir Technologies, Inc. | Cross-ACL multi-master replication |
US20130226891A1 (en) * | 2012-02-29 | 2013-08-29 | Red Hat Inc. | Managing versions of transaction data used for multiple transactions in distributed environments |
US9110940B2 (en) | 2012-02-29 | 2015-08-18 | Red Hat, Inc. | Supporting transactions in distributed environments using a local copy of remote transaction data and optimistic locking |
US9081975B2 (en) | 2012-10-22 | 2015-07-14 | Palantir Technologies, Inc. | Sharing information between nexuses that use different classification schemes for information access control |
US9501761B2 (en) | 2012-11-05 | 2016-11-22 | Palantir Technologies, Inc. | System and method for sharing investigation results |
US9824132B2 (en) * | 2013-01-08 | 2017-11-21 | Facebook, Inc. | Data recovery in multi-leader distributed systems |
US9501202B2 (en) | 2013-03-15 | 2016-11-22 | Palantir Technologies, Inc. | Computer graphical user interface with genomic workflow |
US9965937B2 (en) | 2013-03-15 | 2018-05-08 | Palantir Technologies Inc. | External malware data item clustering and analysis |
US8818892B1 (en) | 2013-03-15 | 2014-08-26 | Palantir Technologies, Inc. | Prioritizing data clusters with customizable scoring strategies |
US8903717B2 (en) | 2013-03-15 | 2014-12-02 | Palantir Technologies Inc. | Method and system for generating a parser and parsing complex data |
US8855999B1 (en) | 2013-03-15 | 2014-10-07 | Palantir Technologies Inc. | Method and system for generating a parser and parsing complex data |
US8930897B2 (en) | 2013-03-15 | 2015-01-06 | Palantir Technologies Inc. | Data integration tool |
US8886601B1 (en) | 2013-06-20 | 2014-11-11 | Palantir Technologies, Inc. | System and method for incrementally replicating investigative analysis data |
US8838538B1 (en) | 2013-07-31 | 2014-09-16 | Palantir Technologies, Inc. | Techniques for replicating changes to access control lists on investigative analysis data |
US9684658B2 (en) | 2013-11-08 | 2017-06-20 | Samsung Electronics Co., Ltd. | SWAT command and API for atomic swap and trim of logical pages |
US9678966B2 (en) | 2013-11-08 | 2017-06-13 | Samsung Electronics Co., Ltd. | Swat command and API for atomic swap and trim of LBAs |
US9569070B1 (en) * | 2013-11-11 | 2017-02-14 | Palantir Technologies, Inc. | Assisting in deconflicting concurrency conflicts |
US9489387B2 (en) * | 2014-01-15 | 2016-11-08 | Avigilon Corporation | Storage management of data streamed from a video source device |
US20150235334A1 (en) | 2014-02-20 | 2015-08-20 | Palantir Technologies Inc. | Healthcare fraud sharing system |
US9009827B1 (en) | 2014-02-20 | 2015-04-14 | Palantir Technologies Inc. | Security sharing system |
US9836580B2 (en) | 2014-03-21 | 2017-12-05 | Palantir Technologies Inc. | Provider portal |
US9971987B1 (en) | 2014-03-25 | 2018-05-15 | Amazon Technologies, Inc. | Out of order data management |
US10318618B2 (en) * | 2014-06-18 | 2019-06-11 | Microsoft Technology Licensing, Llc | Consistent views of partitioned data in eventually consistent systems |
US9785693B2 (en) | 2014-06-30 | 2017-10-10 | Microsoft Technology Licensing, Llc | Intelligent conflict detection and semantic expression of document edits |
WO2016001482A1 (en) * | 2014-07-01 | 2016-01-07 | Cadfaster Oy | A method and system for database replication |
US9021260B1 (en) | 2014-07-03 | 2015-04-28 | Palantir Technologies Inc. | Malware data item analysis |
US10572496B1 (en) | 2014-07-03 | 2020-02-25 | Palantir Technologies Inc. | Distributed workflow system and database with access controls for city resiliency |
US9785773B2 (en) | 2014-07-03 | 2017-10-10 | Palantir Technologies Inc. | Malware data item analysis |
US9202249B1 (en) | 2014-07-03 | 2015-12-01 | Palantir Technologies Inc. | Data item clustering and analysis |
US9367872B1 (en) | 2014-12-22 | 2016-06-14 | Palantir Technologies Inc. | Systems and user interfaces for dynamic and interactive investigation of bad actor behavior based on automatic clustering of related data in various data structures |
US10372879B2 (en) | 2014-12-31 | 2019-08-06 | Palantir Technologies Inc. | Medical claims lead summary report generation |
US11302426B1 (en) | 2015-01-02 | 2022-04-12 | Palantir Technologies Inc. | Unified data interface and system |
US20160246837A1 (en) * | 2015-02-25 | 2016-08-25 | Nokia Technologies Oy | Methods, apparatuses and computer program products for enabling intelligent merging of modified data |
US10209979B2 (en) * | 2015-02-26 | 2019-02-19 | Red Hat, Inc. | System and method for distributed revision control |
US10628834B1 (en) | 2015-06-16 | 2020-04-21 | Palantir Technologies Inc. | Fraud lead detection system for efficiently processing database-stored data and automatically generating natural language explanatory information of system results for display in interactive user interfaces |
US9418337B1 (en) | 2015-07-21 | 2016-08-16 | Palantir Technologies Inc. | Systems and models for data analytics |
US10489391B1 (en) | 2015-08-17 | 2019-11-26 | Palantir Technologies Inc. | Systems and methods for grouping and enriching data items accessed from one or more databases for presentation in a user interface |
US10528546B1 (en) | 2015-09-11 | 2020-01-07 | Cohesity, Inc. | File system consistency in a distributed system using version vectors |
US10621198B1 (en) | 2015-12-30 | 2020-04-14 | Palantir Technologies Inc. | System and method for secure database replication |
US10331636B2 (en) | 2016-09-23 | 2019-06-25 | International Business Machines Corporation | Interactive visualization |
US10430436B2 (en) | 2016-09-23 | 2019-10-01 | International Business Machines Corporation | Interactive visualization |
US10423593B2 (en) | 2016-09-23 | 2019-09-24 | International Business Machines Corporation | Interactive visualization |
US10366061B2 (en) | 2016-09-23 | 2019-07-30 | International Business Machines Corporation | Interactive visualization |
US10262053B2 (en) | 2016-12-22 | 2019-04-16 | Palantir Technologies Inc. | Systems and methods for data replication synchronization |
US11373752B2 (en) | 2016-12-22 | 2022-06-28 | Palantir Technologies Inc. | Detection of misuse of a benefit system |
US10068002B1 (en) | 2017-04-25 | 2018-09-04 | Palantir Technologies Inc. | Systems and methods for adaptive data replication |
US10430062B2 (en) | 2017-05-30 | 2019-10-01 | Palantir Technologies Inc. | Systems and methods for geo-fenced dynamic dissemination |
US11030494B1 (en) | 2017-06-15 | 2021-06-08 | Palantir Technologies Inc. | Systems and methods for managing data spills |
US10628002B1 (en) | 2017-07-10 | 2020-04-21 | Palantir Technologies Inc. | Integrated data authentication system with an interactive user interface |
US10380196B2 (en) | 2017-12-08 | 2019-08-13 | Palantir Technologies Inc. | Systems and methods for using linked documents |
US10915542B1 (en) | 2017-12-19 | 2021-02-09 | Palantir Technologies Inc. | Contextual modification of data sharing constraints in a distributed database system that uses a multi-master replication scheme |
US11360955B2 (en) * | 2018-03-23 | 2022-06-14 | Ebay Inc. | Providing custom read consistency of a data object in a distributed storage system |
US11210349B1 (en) | 2018-08-02 | 2021-12-28 | Palantir Technologies Inc. | Multi-database document search system architecture |
US10969986B2 (en) * | 2018-11-02 | 2021-04-06 | EMC IP Holding Company LLC | Data storage system with storage container pairing for remote replication |
FR3101975B1 (fr) * | 2019-10-11 | 2023-03-10 | Thales Sa | Procede de gestion d'une base de donnees partagee par un groupe d'applications, produit programme d'ordinateur et systeme embarque associes |
US11055262B1 (en) | 2020-03-09 | 2021-07-06 | Snowflake Inc. | Extensible streams on data sources |
Family Cites Families (405)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4881179A (en) | 1988-03-11 | 1989-11-14 | International Business Machines Corp. | Method for providing information security protocols to an electronic calendar |
US5241625A (en) | 1990-11-27 | 1993-08-31 | Farallon Computing, Inc. | Screen image sharing among heterogeneous computers |
US6101479A (en) | 1992-07-15 | 2000-08-08 | Shaw; James G. | System and method for allocating company resources to fulfill customer expectations |
US5548749A (en) | 1993-10-29 | 1996-08-20 | Wall Data Incorporated | Semantic orbject modeling system for creating relational database schemas |
US6877137B1 (en) | 1998-04-09 | 2005-04-05 | Rose Blush Software Llc | System, method and computer program product for mediating notes and note sub-notes linked or otherwise associated with stored or networked web pages |
EP0823092A1 (en) | 1995-04-24 | 1998-02-11 | Aspect Development, Inc. | Modeling of object-oriented database structures, translation to relational database structures, and dynamic searches thereon |
US5708828A (en) | 1995-05-25 | 1998-01-13 | Reliant Data Systems | System for converting data from input data environment using first format to output data environment using second format by executing the associations between their fields |
US5999911A (en) | 1995-06-02 | 1999-12-07 | Mentor Graphics Corporation | Method and system for managing workflow |
AU1119097A (en) | 1995-11-13 | 1997-06-05 | Answersoft, Inc. | Intelligent information routing system and method |
US5774717A (en) | 1995-12-15 | 1998-06-30 | International Business Machines Corporation | Method and article of manufacture for resynchronizing client/server file systems and resolving file system conflicts |
US6098078A (en) * | 1995-12-29 | 2000-08-01 | Lucent Technologies Inc. | Maintaining consistency of database replicas |
US5765171A (en) | 1995-12-29 | 1998-06-09 | Lucent Technologies Inc. | Maintaining consistency of database replicas |
US5806074A (en) | 1996-03-19 | 1998-09-08 | Oracle Corporation | Configurable conflict resolution in a computer implemented distributed database |
US8725493B2 (en) | 2004-01-06 | 2014-05-13 | Neuric Llc | Natural language parsing method to provide conceptual flow |
US5845300A (en) | 1996-06-05 | 1998-12-01 | Microsoft Corporation | Method and apparatus for suggesting completions for a partially entered data item based on previously-entered, associated data items |
US5727145A (en) | 1996-06-26 | 1998-03-10 | Sun Microsystems, Inc. | Mechanism for locating objects in a secure fashion |
CA2190043C (en) | 1996-11-12 | 2001-10-16 | Don E. Hameluck | Buffered screen capturing software tool usability testing of computer applications |
US5943676A (en) | 1996-11-13 | 1999-08-24 | Puma Technology, Inc. | Synchronization of recurring records in incompatible databases |
US6202085B1 (en) | 1996-12-06 | 2001-03-13 | Microsoft Corportion | System and method for incremental change synchronization between multiple copies of data |
US5870761A (en) | 1996-12-19 | 1999-02-09 | Oracle Corporation | Parallel queue propagation |
US6430305B1 (en) | 1996-12-20 | 2002-08-06 | Synaptics, Incorporated | Identity verification methods |
US6065026A (en) | 1997-01-09 | 2000-05-16 | Document.Com, Inc. | Multi-user electronic document authoring system with prompted updating of shared language |
US5978475A (en) | 1997-07-18 | 1999-11-02 | Counterpane Internet Security, Inc. | Event auditing system |
US6463404B1 (en) | 1997-08-08 | 2002-10-08 | British Telecommunications Public Limited Company | Translation |
US6216140B1 (en) * | 1997-09-17 | 2001-04-10 | Hewlett-Packard Company | Methodology for the efficient management of hierarchically organized information |
US7047415B2 (en) | 1997-09-22 | 2006-05-16 | Dfs Linkages, Inc. | System and method for widely witnessed proof of time |
US7017046B2 (en) | 1997-09-22 | 2006-03-21 | Proofspace, Inc. | System and method for graphical indicia for the certification of records |
US6240414B1 (en) | 1997-09-28 | 2001-05-29 | Eisolutions, Inc. | Method of resolving data conflicts in a shared data environment |
US6094650A (en) | 1997-12-15 | 2000-07-25 | Manning & Napier Information Services | Database analysis using a probabilistic ontology |
DE19817911A1 (de) | 1998-04-22 | 1999-10-28 | Novibra Gmbh | Spurlagergehäuse für einen Offenend-Spinnrotor |
US6772350B1 (en) | 1998-05-15 | 2004-08-03 | E.Piphany, Inc. | System and method for controlling access to resources in a distributed environment |
US7168039B2 (en) | 1998-06-02 | 2007-01-23 | International Business Machines Corporation | Method and system for reducing the horizontal space required for displaying a column containing text data |
US6317754B1 (en) * | 1998-07-03 | 2001-11-13 | Mitsubishi Electric Research Laboratories, Inc | System for user control of version /Synchronization in mobile computing |
US6243706B1 (en) | 1998-07-24 | 2001-06-05 | Avid Technology, Inc. | System and method for managing the creation and production of computer generated works |
US6232971B1 (en) | 1998-09-23 | 2001-05-15 | International Business Machines Corporation | Variable modality child windows |
US7213030B1 (en) | 1998-10-16 | 2007-05-01 | Jenkins Steven R | Web-enabled transaction and collaborative management system |
US6523172B1 (en) | 1998-12-17 | 2003-02-18 | Evolutionary Technologies International, Inc. | Parser translator system and method |
US6279018B1 (en) | 1998-12-21 | 2001-08-21 | Kudrollis Software Inventions Pvt. Ltd. | Abbreviating and compacting text to cope with display space constraint in computer software |
US6748481B1 (en) | 1999-04-06 | 2004-06-08 | Microsoft Corporation | Streaming information appliance with circular buffer for receiving and selectively reading blocks of streaming information |
US6539381B1 (en) * | 1999-04-21 | 2003-03-25 | Novell, Inc. | System and method for synchronizing database information |
AU5273100A (en) | 1999-05-17 | 2000-12-05 | Foxboro Company, The | Methods and apparatus for control configuration with versioning, security, composite blocks, edit selection, object swapping, formulaic values and other aspects |
US7373592B2 (en) | 1999-07-30 | 2008-05-13 | Microsoft Corporation | Modeless child windows for application programs |
US6560620B1 (en) * | 1999-08-03 | 2003-05-06 | Aplix Research, Inc. | Hierarchical document comparison system and method |
GB2371901B (en) | 1999-09-21 | 2004-06-23 | Andrew E Borthwick | A probabilistic record linkage model derived from training data |
US6523019B1 (en) | 1999-09-21 | 2003-02-18 | Choicemaker Technologies, Inc. | Probabilistic record linkage model derived from training data |
WO2001025906A1 (en) | 1999-10-01 | 2001-04-12 | Global Graphics Software Limited | Method and system for arranging a workflow using graphical user interface |
US7216115B1 (en) | 1999-11-10 | 2007-05-08 | Fastcase.Com, Inc. | Apparatus and method for displaying records responsive to a database query |
US6370538B1 (en) | 1999-11-22 | 2002-04-09 | Xerox Corporation | Direct manipulation interface for document properties |
US6944821B1 (en) | 1999-12-07 | 2005-09-13 | International Business Machines Corporation | Copy/paste mechanism and paste buffer that includes source information for copied data |
US7194680B1 (en) | 1999-12-07 | 2007-03-20 | Adobe Systems Incorporated | Formatting content by example |
US20020032677A1 (en) | 2000-03-01 | 2002-03-14 | Jeff Morgenthaler | Methods for creating, editing, and updating searchable graphical database and databases of graphical images and information and displaying graphical images from a searchable graphical database or databases in a sequential or slide show format |
US7660830B2 (en) | 2000-04-17 | 2010-02-09 | Avaya Inc. | System for integrating diverse database and maintaining their consistency |
US6642945B1 (en) | 2000-05-04 | 2003-11-04 | Microsoft Corporation | Method and system for optimizing a visual display for handheld computer systems |
EP1290575B1 (en) | 2000-05-16 | 2005-06-08 | O'Carroll, Garrett | A document processing system and method |
US8386945B1 (en) | 2000-05-17 | 2013-02-26 | Eastman Kodak Company | System and method for implementing compound documents in a production printing workflow |
US6725240B1 (en) | 2000-08-08 | 2004-04-20 | International Business Machines Corporation | Apparatus and method for protecting against data tampering in an audit subsystem |
US6967589B1 (en) | 2000-08-11 | 2005-11-22 | Oleumtech Corporation | Gas/oil well monitoring system |
GB2366498A (en) | 2000-08-25 | 2002-03-06 | Copyn Ltd | Method of bookmarking a section of a web-page and storing said bookmarks |
US6807569B1 (en) | 2000-09-12 | 2004-10-19 | Science Applications International Corporation | Trusted and anonymous system and method for sharing threat data to industry assets |
US6640231B1 (en) | 2000-10-06 | 2003-10-28 | Ontology Works, Inc. | Ontology for database design and application development |
US8707185B2 (en) | 2000-10-10 | 2014-04-22 | Addnclick, Inc. | Dynamic information management system and method for content delivery and sharing in content-, metadata- and viewer-based, live social networking among users concurrently engaged in the same and/or similar content |
US6816941B1 (en) | 2000-10-23 | 2004-11-09 | International Business Machines Corporation | Method and system for efficiently importing/exporting removable storage volumes between virtual storage systems |
US7027974B1 (en) | 2000-10-27 | 2006-04-11 | Science Applications International Corporation | Ontology-based parser for natural language processing |
US6754640B2 (en) | 2000-10-30 | 2004-06-22 | William O. Bozeman | Universal positive pay match, authentication, authorization, settlement and clearing system |
US6978419B1 (en) | 2000-11-15 | 2005-12-20 | Justsystem Corporation | Method and apparatus for efficient identification of duplicate and near-duplicate documents and text spans using high-discriminability text fragments |
US20020103705A1 (en) | 2000-12-06 | 2002-08-01 | Forecourt Communication Group | Method and apparatus for using prior purchases to select activities to present to a customer |
US7529698B2 (en) | 2001-01-16 | 2009-05-05 | Raymond Anthony Joao | Apparatus and method for providing transaction history information, account history information, and/or charge-back information |
US6850317B2 (en) | 2001-01-23 | 2005-02-01 | Schlumberger Technology Corporation | Apparatus and methods for determining velocity of oil in a flow stream |
US9053222B2 (en) | 2002-05-17 | 2015-06-09 | Lawrence A. Lynn | Patient safety processor |
US7921123B2 (en) | 2001-02-20 | 2011-04-05 | Hartford Fire Insurance Company | Method and system for processing physician claims over a network |
US20100057622A1 (en) | 2001-02-27 | 2010-03-04 | Faith Patrick L | Distributed Quantum Encrypted Pattern Generation And Scoring |
US7877421B2 (en) | 2001-05-25 | 2011-01-25 | International Business Machines Corporation | Method and system for mapping enterprise data assets to a semantic information model |
US6665683B1 (en) | 2001-06-22 | 2003-12-16 | E. Intelligence, Inc. | System and method for adjusting a value within a multidimensional aggregation tree |
US8001465B2 (en) | 2001-06-26 | 2011-08-16 | Kudrollis Software Inventions Pvt. Ltd. | Compacting an information array display to cope with two dimensional display space constraint |
US20020196229A1 (en) | 2001-06-26 | 2002-12-26 | Frank Chen | Graphics-based calculator capable of directly editing data points on graph |
US6993522B2 (en) | 2001-06-27 | 2006-01-31 | Microsoft Corporation | System and method for resolving conflicts detected during a synchronization session |
US20040205492A1 (en) | 2001-07-26 | 2004-10-14 | Newsome Mark R. | Content clipping service |
US7072911B1 (en) | 2001-07-27 | 2006-07-04 | Novell, Inc. | System and method for incremental replication of changes in a state based distributed database |
US20030036927A1 (en) | 2001-08-20 | 2003-02-20 | Bowen Susan W. | Healthcare information search system and user interface |
US20030061132A1 (en) | 2001-09-26 | 2003-03-27 | Yu, Mason K. | System and method for categorizing, aggregating and analyzing payment transactions data |
JP4420324B2 (ja) | 2001-11-01 | 2010-02-24 | ベリサイン・インコーポレイテッド | 高速非並行制御されたデータベース |
US20030088654A1 (en) | 2001-11-02 | 2003-05-08 | Gordon Good | Directory server schema replication |
US20040103147A1 (en) | 2001-11-13 | 2004-05-27 | Flesher Kevin E. | System for enabling collaboration and protecting sensitive data |
US6971004B1 (en) | 2001-11-19 | 2005-11-29 | Cypress Semiconductor Corp. | System and method of dynamically reconfiguring a programmable integrated circuit |
US7089541B2 (en) | 2001-11-30 | 2006-08-08 | Sun Microsystems, Inc. | Modular parser architecture with mini parsers |
US20030172368A1 (en) | 2001-12-26 | 2003-09-11 | Elizabeth Alumbaugh | System and method for autonomously generating heterogeneous data source interoperability bridges based on semantic modeling derived from self adapting ontology |
EP1461707A1 (en) | 2001-12-31 | 2004-09-29 | Citadel Security Software Inc. | Automated computer vulnerability resolution system |
US7174377B2 (en) | 2002-01-16 | 2007-02-06 | Xerox Corporation | Method and apparatus for collaborative document versioning of networked documents |
US7225183B2 (en) | 2002-01-28 | 2007-05-29 | Ipxl, Inc. | Ontology-based information management system and method |
AU2003210795A1 (en) | 2002-02-01 | 2003-09-02 | John Fairweather | System and method for analyzing data |
US7519589B2 (en) | 2003-02-04 | 2009-04-14 | Cataphora, Inc. | Method and apparatus for sociological data analysis |
AU2003211000A1 (en) | 2002-02-12 | 2003-09-04 | Sandpiper Software, Inc. | Ontology frame-based knowledge representation in the unified modeling language (uml) |
US7813937B1 (en) | 2002-02-15 | 2010-10-12 | Fair Isaac Corporation | Consistency modeling of healthcare claims to detect fraud and abuse |
US7096498B2 (en) | 2002-03-08 | 2006-08-22 | Cipher Trust, Inc. | Systems and methods for message threat management |
US6993539B2 (en) | 2002-03-19 | 2006-01-31 | Network Appliance, Inc. | System and method for determining changes in two snapshots and for transmitting changes to destination snapshot |
EP1493113A4 (en) | 2002-03-20 | 2009-04-22 | Catalina Marketing Corp | TARGETED STIMULATIONS BASED ON PREDICTED BEHAVIOR |
US7606881B2 (en) | 2002-04-25 | 2009-10-20 | Oracle International Corporation | System and method for synchronization of version annotated objects |
US7237192B1 (en) | 2002-04-30 | 2007-06-26 | Oracle International Corporation | Methods and systems for naming and indexing children in a hierarchical nodal structure |
US7437664B2 (en) * | 2002-06-18 | 2008-10-14 | Microsoft Corporation | Comparing hierarchically-structured documents |
US20040044648A1 (en) | 2002-06-24 | 2004-03-04 | Xmyphonic System As | Method for data-centric collaboration |
WO2004016066A2 (fr) | 2002-08-13 | 2004-02-26 | Highdeal | Editeur et procede d'edition de formules de calcul du prix d'un service et systeme de valorisation automatique d'un service |
US7305659B2 (en) | 2002-09-03 | 2007-12-04 | Sap Ag | Handling parameters in test scripts for computer program applications |
US20040078451A1 (en) | 2002-10-17 | 2004-04-22 | International Business Machines Corporation | Separating and saving hyperlinks of special interest from a sequence of web documents being browsed at a receiving display station on the web |
US8799023B2 (en) | 2002-10-18 | 2014-08-05 | Medimpact Healthcare Systems, Inc. | Mass customization for management of healthcare |
US20040083466A1 (en) | 2002-10-29 | 2004-04-29 | Dapp Michael C. | Hardware parser accelerator |
US7162501B2 (en) * | 2002-11-26 | 2007-01-09 | Microsoft Corporation | Hierarchical differential document representative of changes between versions of hierarchical document |
US7739240B2 (en) * | 2002-12-09 | 2010-06-15 | Hewlett-Packard Development Company, L.P. | Replication and replica management in a wide area file system |
US20040153418A1 (en) | 2003-02-05 | 2004-08-05 | Hanweck Gerald Alfred | System and method for providing access to data from proprietary tools |
DE10308725A1 (de) | 2003-02-28 | 2004-09-09 | Abb Research Ltd. | System und Verfahren zum Verwalten und zum Austausch von Daten eines technischen Projektes, einer technischen Anlage sowie einzelner Anlagenkomponenten |
US7769794B2 (en) | 2003-03-24 | 2010-08-03 | Microsoft Corporation | User interface for a file system shell |
US7676788B1 (en) * | 2003-03-25 | 2010-03-09 | Electric Cloud, Inc. | Architecture and method for executing program builds |
US7818297B2 (en) | 2003-03-31 | 2010-10-19 | Hewlett-Packard Development Company, L.P. | System and method for refreshing a table using epochs |
US7086028B1 (en) | 2003-04-09 | 2006-08-01 | Autodesk, Inc. | Simplified generation of design change information on a drawing in a computer aided design (CAD) environment |
KR100996029B1 (ko) | 2003-04-29 | 2010-11-22 | 삼성전자주식회사 | 저밀도 패리티 검사 코드의 부호화 장치 및 방법 |
US7681235B2 (en) | 2003-05-19 | 2010-03-16 | Radware Ltd. | Dynamic network protection |
US20040236711A1 (en) | 2003-05-21 | 2004-11-25 | Bentley Systems, Inc. | System and method for automating the extraction of information contained within an engineering document |
US8065725B2 (en) | 2003-05-30 | 2011-11-22 | Yuliang Zheng | Systems and methods for enhanced network security |
US20040250576A1 (en) | 2003-06-16 | 2004-12-16 | Flanders Emory H. | Double-secured latch |
US7441219B2 (en) | 2003-06-24 | 2008-10-21 | National Semiconductor Corporation | Method for creating, modifying, and simulating electrical circuits over the internet |
US8412566B2 (en) | 2003-07-08 | 2013-04-02 | Yt Acquisition Corporation | High-precision customer-based targeting by individual usage statistics |
AU2003903994A0 (en) | 2003-07-31 | 2003-08-14 | Canon Kabushiki Kaisha | Collaborative editing with automatic layout |
US7363581B2 (en) | 2003-08-12 | 2008-04-22 | Accenture Global Services Gmbh | Presentation generator |
US7483915B2 (en) | 2003-08-21 | 2009-01-27 | Microsoft Corporation | Systems and method for representing relationships between units of information manageable by a hardware/software interface system |
US7512638B2 (en) | 2003-08-21 | 2009-03-31 | Microsoft Corporation | Systems and methods for providing conflict handling for peer-to-peer synchronization of units of information manageable by a hardware/software interface system |
WO2005036319A2 (en) | 2003-09-22 | 2005-04-21 | Catalina Marketing International, Inc. | Assumed demographics, predicted behaviour, and targeted incentives |
US7441182B2 (en) | 2003-10-23 | 2008-10-21 | Microsoft Corporation | Digital negatives |
US7536696B2 (en) | 2003-10-24 | 2009-05-19 | Microsoft Corporation | Mechanism for handling input parameters |
US20050091186A1 (en) | 2003-10-24 | 2005-04-28 | Alon Elish | Integrated method and apparatus for capture, storage, and retrieval of information |
US8190893B2 (en) | 2003-10-27 | 2012-05-29 | Jp Morgan Chase Bank | Portable security transaction protocol |
US7930757B2 (en) | 2003-10-31 | 2011-04-19 | Adobe Systems Incorporated | Offline access in a document control system |
US20050108063A1 (en) | 2003-11-05 | 2005-05-19 | Madill Robert P.Jr. | Systems and methods for assessing the potential for fraud in business transactions |
US20050125715A1 (en) | 2003-12-04 | 2005-06-09 | Fabrizio Di Franco | Method of saving data in a graphical user interface |
US7165216B2 (en) | 2004-01-14 | 2007-01-16 | Xerox Corporation | Systems and methods for converting legacy and proprietary documents into extended mark-up language format |
US7343552B2 (en) | 2004-02-12 | 2008-03-11 | Fuji Xerox Co., Ltd. | Systems and methods for freeform annotations |
US20060053097A1 (en) | 2004-04-01 | 2006-03-09 | King Martin T | Searching and accessing documents on private networks for use with captures from rendered documents |
US7596285B2 (en) | 2004-02-26 | 2009-09-29 | International Business Machines Corporation | Providing a portion of an electronic mail message at a reduced resolution |
US8688634B2 (en) | 2004-02-27 | 2014-04-01 | International Business Machines Corporation | Asynchronous peer-to-peer data replication |
US7302708B2 (en) | 2004-03-11 | 2007-11-27 | Harris Corporation | Enforcing computer security utilizing an adaptive lattice mechanism |
US7770032B2 (en) | 2004-04-06 | 2010-08-03 | Telecom Italia S.P.A. | Secure logging for irrefutable administration |
US8713418B2 (en) | 2004-04-12 | 2014-04-29 | Google Inc. | Adding value to a rendered document |
US20060031779A1 (en) | 2004-04-15 | 2006-02-09 | Citrix Systems, Inc. | Selectively sharing screen data |
US8041701B2 (en) | 2004-05-04 | 2011-10-18 | DG FastChannel, Inc | Enhanced graphical interfaces for displaying visual data |
US7689601B2 (en) | 2004-05-06 | 2010-03-30 | Oracle International Corporation | Achieving web documents using unique document locators |
US7225468B2 (en) | 2004-05-07 | 2007-05-29 | Digital Security Networks, Llc | Methods and apparatus for computer network security using intrusion detection and prevention |
US7860875B2 (en) | 2004-05-26 | 2010-12-28 | International Business Machines Corporation | Method for modifying a query by use of an external system for managing assignment of user and data classifications |
FR2872653B1 (fr) | 2004-06-30 | 2006-12-29 | Skyrecon Systems Sa | Systeme et procedes de securisation de postes informatiques et/ou de reseaux de communications |
US7870487B2 (en) | 2004-07-29 | 2011-01-11 | International Business Machines Corporation | Inserting into a document a screen image of a computer software application |
US7552116B2 (en) | 2004-08-06 | 2009-06-23 | The Board Of Trustees Of The University Of Illinois | Method and system for extracting web query interfaces |
US7290698B2 (en) | 2004-08-25 | 2007-11-06 | Sony Corporation | Progress bar with multiple portions |
US7493333B2 (en) | 2004-09-03 | 2009-02-17 | Biowisdom Limited | System and method for parsing and/or exporting data from one or more multi-relational ontologies |
US20060059423A1 (en) | 2004-09-13 | 2006-03-16 | Stefan Lehmann | Apparatus, system, and method for creating customized workflow documentation |
US7933862B2 (en) | 2004-09-27 | 2011-04-26 | Microsoft Corporation | One click conditional formatting method and system for software programs |
US20060080139A1 (en) | 2004-10-08 | 2006-04-13 | Woodhaven Health Services | Preadmission health care cost and reimbursement estimation tool |
US8892571B2 (en) | 2004-10-12 | 2014-11-18 | International Business Machines Corporation | Systems for associating records in healthcare database with individuals |
CA2484694A1 (en) | 2004-10-14 | 2006-04-14 | Alcatel | Database ram cache |
US20060106879A1 (en) | 2004-11-16 | 2006-05-18 | International Business Machines Corporation | Conflict resolution in a synchronization framework |
US20060129746A1 (en) | 2004-12-14 | 2006-06-15 | Ithink, Inc. | Method and graphic interface for storing, moving, sending or printing electronic data to two or more locations, in two or more formats with a single save function |
US7451397B2 (en) | 2004-12-15 | 2008-11-11 | Microsoft Corporation | System and method for automatically completing spreadsheet formulas |
US9020887B2 (en) | 2004-12-21 | 2015-04-28 | Proofpoint, Inc. | Managing the status of documents in a distributed storage system |
US7716140B1 (en) | 2004-12-31 | 2010-05-11 | Google Inc. | Methods and systems for controlling access to relationship information in a social network |
US7509354B2 (en) | 2005-01-07 | 2009-03-24 | International Business Machines Corporation | System, method, and computer program product for multi-master replication conflict resolution |
US8316060B1 (en) | 2005-01-26 | 2012-11-20 | 21st Century Technologies | Segment matching search system and method |
US8271436B2 (en) | 2005-02-07 | 2012-09-18 | Mimosa Systems, Inc. | Retro-fitting synthetic full copies of data |
US8214353B2 (en) | 2005-02-18 | 2012-07-03 | International Business Machines Corporation | Support for schema evolution in a multi-node peer-to-peer replication environment |
US20060190295A1 (en) | 2005-02-22 | 2006-08-24 | Richard Merkin | Systems and methods for assessing and optimizing healthcare administration |
US20080186904A1 (en) | 2005-02-28 | 2008-08-07 | Kazuhiro Koyama | Data Communication Terminal, Radio Base Station Searching Method, and Program |
US8646080B2 (en) | 2005-09-16 | 2014-02-04 | Avg Technologies Cy Limited | Method and apparatus for removing harmful software |
US8091784B1 (en) | 2005-03-09 | 2012-01-10 | Diebold, Incorporated | Banking system controlled responsive to data bearing records |
US7657868B2 (en) | 2005-03-14 | 2010-02-02 | Research In Motion Limited | System and method for applying development patterns for component based applications |
US7676845B2 (en) | 2005-03-24 | 2010-03-09 | Microsoft Corporation | System and method of selectively scanning a file on a computing device for malware |
US20060224579A1 (en) | 2005-03-31 | 2006-10-05 | Microsoft Corporation | Data mining techniques for improving search engine relevance |
US20100262901A1 (en) | 2005-04-14 | 2010-10-14 | Disalvo Dean F | Engineering process for a real-time user-defined data collection, analysis, and optimization tool (dot) |
US20060242204A1 (en) | 2005-04-22 | 2006-10-26 | Microsoft Corporation | Sync manager conflict resolution |
US20060265377A1 (en) | 2005-05-19 | 2006-11-23 | Trimergent | Personalizable information networks |
US20060277460A1 (en) | 2005-06-03 | 2006-12-07 | Scott Forstall | Webview applications |
EP1732034A1 (en) | 2005-06-06 | 2006-12-13 | First Data Corporation | System and method for authorizing electronic payment transactions |
US7693958B2 (en) | 2005-06-20 | 2010-04-06 | Microsoft Corporation | Instant messaging with data sharing |
US7523146B2 (en) | 2005-06-21 | 2009-04-21 | Apple Inc. | Apparatus and method for peer-to-peer N-way synchronization in a decentralized environment |
US8201160B2 (en) | 2005-07-05 | 2012-06-12 | International Business Machines Corporation | Data processing method and system |
US20070026373A1 (en) | 2005-07-26 | 2007-02-01 | Microsoft Corporation | Resource replication service protocol |
EP1927060B1 (en) | 2005-08-09 | 2019-10-09 | Nexsan Technologies Canada Inc. | Data archiving method and system |
US7529726B2 (en) | 2005-08-22 | 2009-05-05 | International Business Machines Corporation | XML sub-document versioning method in XML databases using record storages |
WO2007025279A2 (en) | 2005-08-25 | 2007-03-01 | Fortify Software, Inc. | Apparatus and method for analyzing and supplementing a program to provide security |
US7958147B1 (en) | 2005-09-13 | 2011-06-07 | James Luke Turner | Method for providing customized and automated security assistance, a document marking regime, and central tracking and control for sensitive or classified documents in electronic format |
US7941336B1 (en) | 2005-09-14 | 2011-05-10 | D2C Solutions, LLC | Segregation-of-duties analysis apparatus and method |
US8468441B2 (en) | 2005-09-15 | 2013-06-18 | Microsoft Corporation | Cross-application support of charts |
US7792814B2 (en) | 2005-09-30 | 2010-09-07 | Sap, Ag | Apparatus and method for parsing unstructured data |
US20070130217A1 (en) | 2005-10-13 | 2007-06-07 | Unwired Software, Inc. | Many to many data synchronization |
US7627812B2 (en) | 2005-10-27 | 2009-12-01 | Microsoft Corporation | Variable formatting of cells |
JP4875958B2 (ja) | 2005-10-28 | 2012-02-15 | 株式会社リコー | 文書管理システム |
US20090168163A1 (en) | 2005-11-01 | 2009-07-02 | Global Bionic Optics Pty Ltd. | Optical lens systems |
US7536419B2 (en) | 2005-11-15 | 2009-05-19 | Microsoft Corporation | Slave replica member |
US7660807B2 (en) | 2005-11-28 | 2010-02-09 | Commvault Systems, Inc. | Systems and methods for cataloging metadata for a metabase |
US7788223B2 (en) | 2005-12-05 | 2010-08-31 | Microsoft Corporation | Resource freshness and replication |
US20070136095A1 (en) | 2005-12-09 | 2007-06-14 | Arizona Board Of Regents On Behalf Of The University Of Arizona | Icon Queues for Workflow Management |
US7634717B2 (en) | 2006-01-23 | 2009-12-15 | Microsoft Corporation | Multiple conditional formatting |
US7770100B2 (en) | 2006-02-27 | 2010-08-03 | Microsoft Corporation | Dynamic thresholds for conditional formats |
US7552148B2 (en) | 2006-02-28 | 2009-06-23 | Microsoft Corporation | Shutdown recovery |
US7620721B2 (en) | 2006-02-28 | 2009-11-17 | Microsoft Corporation | Pre-existing content replication |
US8271948B2 (en) | 2006-03-03 | 2012-09-18 | Telefonaktiebolaget L M Ericsson (Publ) | Subscriber identity module (SIM) application toolkit test method and system |
US7530105B2 (en) | 2006-03-21 | 2009-05-05 | 21St Century Technologies, Inc. | Tactical and strategic attack detection and prediction |
US7490298B2 (en) | 2006-04-12 | 2009-02-10 | International Business Machines Corporation | Creating documentation screenshots on demand |
WO2007133206A1 (en) | 2006-05-12 | 2007-11-22 | Drawing Management Incorporated | Spatial graphical user interface and method for using the same |
US9195985B2 (en) | 2006-06-08 | 2015-11-24 | Iii Holdings 1, Llc | Method, system, and computer program product for customer-level data verification |
US7805408B2 (en) | 2006-06-09 | 2010-09-28 | Microsoft Corporation | Unified mechanism for presenting and resolving grouped synchronization conflicts |
US7891003B2 (en) | 2006-06-14 | 2011-02-15 | Microsoft Corporation | Enterprise threat modeling |
US7953710B2 (en) | 2006-06-23 | 2011-05-31 | Microsoft Corporation | Multi-master database synchronization without loss of convergence |
US7953785B2 (en) * | 2006-06-30 | 2011-05-31 | Microsoft Corporation | Content synchronization in a file sharing environment |
US7933955B2 (en) | 2006-07-11 | 2011-04-26 | Igor Khalatian | One-click universal screen sharing |
US7558791B2 (en) | 2006-07-31 | 2009-07-07 | Informed Control Inc | System and method for ontology-based translation between directory schemas |
DE102006036584B4 (de) * | 2006-08-04 | 2018-07-26 | Siemens Healthcare Gmbh | Verwalten von unterschiedlich versionierten Konfigurationsdateien einer medizinischen Einrichtung |
US9207933B2 (en) * | 2006-10-10 | 2015-12-08 | International Business Machines Corporation | Identifying authors of changes between multiple versions of a file |
US9183321B2 (en) | 2006-10-16 | 2015-11-10 | Oracle International Corporation | Managing compound XML documents in a repository |
US8024304B2 (en) | 2006-10-26 | 2011-09-20 | Titus, Inc. | Document classification toolbar |
US20080148398A1 (en) | 2006-10-31 | 2008-06-19 | Derek John Mezack | System and Method for Definition and Automated Analysis of Computer Security Threat Models |
US20080109714A1 (en) | 2006-11-03 | 2008-05-08 | Sap Ag | Capturing screen information |
US7962495B2 (en) | 2006-11-20 | 2011-06-14 | Palantir Technologies, Inc. | Creating data in a data store using a dynamic ontology |
US8688749B1 (en) | 2011-03-31 | 2014-04-01 | Palantir Technologies, Inc. | Cross-ontology multi-master replication |
US8515912B2 (en) | 2010-07-15 | 2013-08-20 | Palantir Technologies, Inc. | Sharing and deconflicting data changes in a multimaster database system |
US8117022B2 (en) | 2006-12-07 | 2012-02-14 | Linker Sheldon O | Method and system for machine understanding, knowledge, and conversation |
US8290838B1 (en) | 2006-12-29 | 2012-10-16 | Amazon Technologies, Inc. | Indicating irregularities in online financial transactions |
US9015301B2 (en) | 2007-01-05 | 2015-04-21 | Digital Doors, Inc. | Information infrastructure management tools with extractor, secure storage, content analysis and classification and method therefor |
US20080177782A1 (en) | 2007-01-10 | 2008-07-24 | Pado Metaware Ab | Method and system for facilitating the production of documents |
US7900142B2 (en) | 2007-01-15 | 2011-03-01 | Microsoft Corporation | Selective undo of editing operations performed on data objects |
US8171418B2 (en) | 2007-01-31 | 2012-05-01 | Salesforce.Com, Inc. | Method and system for presenting a visual representation of the portion of the sets of data that a query is expected to return |
US20080189240A1 (en) | 2007-02-05 | 2008-08-07 | Mullins Ward R | System, method and software for creating or maintaining local or distributed mapping and transparent persistence of complex data objects and their data relationships |
US8196184B2 (en) | 2007-02-16 | 2012-06-05 | Microsoft Corporation | Efficient data structures for multi-dimensional security |
US8006094B2 (en) | 2007-02-21 | 2011-08-23 | Ricoh Co., Ltd. | Trustworthy timestamps and certifiable clocks using logs linked by cryptographic hashes |
US8959568B2 (en) | 2007-03-14 | 2015-02-17 | Microsoft Corporation | Enterprise security assessment sharing |
US8180717B2 (en) | 2007-03-20 | 2012-05-15 | President And Fellows Of Harvard College | System for estimating a distribution of message content categories in source data |
US7992082B2 (en) | 2007-03-21 | 2011-08-02 | Primatech Corporation | System and technique for editing and classifying documents |
US7925629B2 (en) | 2007-03-28 | 2011-04-12 | Netapp, Inc. | Write ordering style asynchronous replication utilizing a loosely-accurate global clock |
US9140552B2 (en) | 2008-07-02 | 2015-09-22 | Qualcomm Incorporated | User defined names for displaying monitored location |
US8312546B2 (en) | 2007-04-23 | 2012-11-13 | Mcafee, Inc. | Systems, apparatus, and methods for detecting malware |
US20090013245A1 (en) | 2007-04-27 | 2009-01-08 | Bea Systems, Inc. | Enterprise web application constructor xml editor framework |
US7880921B2 (en) | 2007-05-01 | 2011-02-01 | Michael Joseph Dattilo | Method and apparatus to digitally whiteout mistakes on a printed form |
DE102008010419A1 (de) | 2007-05-03 | 2008-11-13 | Navigon Ag | Vorrichtung und Verfahren zur Erstellung eines Textobjekts |
US7962904B2 (en) | 2007-05-10 | 2011-06-14 | Microsoft Corporation | Dynamic parser |
WO2008141434A1 (en) | 2007-05-17 | 2008-11-27 | Fat Free Mobile Inc. | Method and system for transcoding web pages by limiting selection through direction |
US8010507B2 (en) | 2007-05-24 | 2011-08-30 | Pado Metaware Ab | Method and system for harmonization of variants of a sequential file |
US7930547B2 (en) | 2007-06-15 | 2011-04-19 | Alcatel-Lucent Usa Inc. | High accuracy bloom filter using partitioned hashing |
US8505065B2 (en) | 2007-06-20 | 2013-08-06 | Microsoft Corporation | Access control policy in a weakly-coherent distributed collection |
US7966199B1 (en) | 2007-07-19 | 2011-06-21 | Intuit Inc. | Method and system for identification of geographic condition zones using aggregated claim data |
US8589811B2 (en) | 2007-07-20 | 2013-11-19 | International Business Machines Corporation | Techniques for organizing information accessed through a web browser |
US8205166B2 (en) | 2007-07-20 | 2012-06-19 | International Business Machines Corporation | Methods for organizing information accessed through a web browser |
US8156166B2 (en) | 2007-08-06 | 2012-04-10 | Intuit Inc. | Method and apparatus for selecting a doctor based on an observed experience level |
WO2009039391A1 (en) | 2007-09-21 | 2009-03-26 | The Methodist Hospital System | Systems, methods and apparatuses for generating and using representations of individual or aggregate human medical data |
US8191005B2 (en) | 2007-09-27 | 2012-05-29 | Rockwell Automation Technologies, Inc. | Dynamically generating visualizations in industrial automation environment as a function of context and state information |
EP2051173A3 (en) | 2007-09-27 | 2009-08-12 | Magix Ag | System and method for dynamic content insertion from the internet into a multimedia work |
FR2921779B1 (fr) | 2007-09-28 | 2011-02-18 | Alcatel Lucent | Communication d'une information de risque dans un reseau multi-domaine |
US8554719B2 (en) | 2007-10-18 | 2013-10-08 | Palantir Technologies, Inc. | Resolving database entity information |
US8214308B2 (en) | 2007-10-23 | 2012-07-03 | Sas Institute Inc. | Computer-implemented systems and methods for updating predictive models |
US20090112678A1 (en) | 2007-10-26 | 2009-04-30 | Ingram Micro Inc. | System and method for knowledge management |
US7650310B2 (en) | 2007-10-30 | 2010-01-19 | Intuit Inc. | Technique for reducing phishing |
US8688607B2 (en) | 2007-11-12 | 2014-04-01 | Debra Pacha | System and method for detecting healthcare insurance fraud |
US20090199090A1 (en) * | 2007-11-23 | 2009-08-06 | Timothy Poston | Method and system for digital file flow management |
US8682696B1 (en) | 2007-11-30 | 2014-03-25 | Intuit Inc. | Healthcare claims navigator |
US20090150868A1 (en) | 2007-12-10 | 2009-06-11 | Al Chakra | Method and System for Capturing Movie Shots at the Time of an Automated Graphical User Interface Test Failure |
US8001482B2 (en) | 2007-12-21 | 2011-08-16 | International Business Machines Corporation | Method of displaying tab titles |
US8010886B2 (en) | 2008-01-04 | 2011-08-30 | Microsoft Corporation | Intelligently representing files in a view |
US8055633B2 (en) | 2008-01-21 | 2011-11-08 | International Business Machines Corporation | Method, system and computer program product for duplicate detection |
US20090199106A1 (en) | 2008-02-05 | 2009-08-06 | Sony Ericsson Mobile Communications Ab | Communication terminal including graphical bookmark manager |
US20090216562A1 (en) | 2008-02-22 | 2009-08-27 | Faulkner Judith R | Method and apparatus for accommodating diverse healthcare record centers |
US8473519B1 (en) | 2008-02-25 | 2013-06-25 | Cisco Technology, Inc. | Unified communication audit tool |
US7765489B1 (en) | 2008-03-03 | 2010-07-27 | Shah Shalin N | Presenting notifications related to a medical study on a toolbar |
TWI366114B (en) | 2008-03-04 | 2012-06-11 | Ind Tech Res Inst | Record system and method based on one-way hash function |
US8856088B2 (en) | 2008-04-01 | 2014-10-07 | Microsoft Corporation | Application-managed file versioning |
US20090249178A1 (en) | 2008-04-01 | 2009-10-01 | Ambrosino Timothy J | Document linking |
US20090254970A1 (en) | 2008-04-04 | 2009-10-08 | Avaya Inc. | Multi-tier security event correlation and mitigation |
US8121962B2 (en) | 2008-04-25 | 2012-02-21 | Fair Isaac Corporation | Automated entity identification for efficient profiling in an event probability prediction system |
US20090282068A1 (en) | 2008-05-12 | 2009-11-12 | Shockro John J | Semantic packager |
US8620641B2 (en) | 2008-05-16 | 2013-12-31 | Blackberry Limited | Intelligent elision |
WO2009149063A1 (en) | 2008-06-02 | 2009-12-10 | Azuki Systems, Inc. | Media mashup system |
US8924469B2 (en) | 2008-06-05 | 2014-12-30 | Headwater Partners I Llc | Enterprise access control and accounting allocation for access networks |
US20090307049A1 (en) | 2008-06-05 | 2009-12-10 | Fair Isaac Corporation | Soft Co-Clustering of Data |
US8860754B2 (en) | 2008-06-22 | 2014-10-14 | Tableau Software, Inc. | Methods and systems of automatically generating marks in a graphical view |
US8301904B1 (en) | 2008-06-24 | 2012-10-30 | Mcafee, Inc. | System, method, and computer program product for automatically identifying potentially unwanted data as unwanted |
US8689335B2 (en) | 2008-06-25 | 2014-04-01 | Microsoft Corporation | Mapping between users and machines in an enterprise security assessment sharing system |
GB2461771A (en) | 2008-07-11 | 2010-01-20 | Icyte Pty Ltd | Annotation of electronic documents with preservation of document as originally annotated |
US8346532B2 (en) | 2008-07-11 | 2013-01-01 | International Business Machines Corporation | Managing the creation, detection, and maintenance of sensitive information |
US9411864B2 (en) | 2008-08-26 | 2016-08-09 | Zeewise, Inc. | Systems and methods for collection and consolidation of heterogeneous remote business data using dynamic data handling |
US9348499B2 (en) | 2008-09-15 | 2016-05-24 | Palantir Technologies, Inc. | Sharing objects that rely on local resources with outside servers |
US8667583B2 (en) | 2008-09-22 | 2014-03-04 | Microsoft Corporation | Collecting and analyzing malware data |
US8417561B2 (en) | 2008-09-24 | 2013-04-09 | Bank Of America Corporation | Market dynamics |
US8015151B2 (en) | 2008-10-13 | 2011-09-06 | Sap Ag | Method and system for managing and modifying time dependent data structures |
US8391584B2 (en) | 2008-10-20 | 2013-03-05 | Jpmorgan Chase Bank, N.A. | Method and system for duplicate check detection |
US8108933B2 (en) | 2008-10-21 | 2012-01-31 | Lookout, Inc. | System and method for attack and malware prevention |
US8442940B1 (en) | 2008-11-18 | 2013-05-14 | Semantic Research, Inc. | Systems and methods for pairing of a semantic network and a natural language processing information extraction system |
US8204859B2 (en) | 2008-12-10 | 2012-06-19 | Commvault Systems, Inc. | Systems and methods for managing replicated database data |
US20100169137A1 (en) | 2008-12-31 | 2010-07-01 | Ebay Inc. | Methods and systems to analyze data using a graph |
US20100262688A1 (en) | 2009-01-21 | 2010-10-14 | Daniar Hussain | Systems, methods, and devices for detecting security vulnerabilities in ip networks |
US8073857B2 (en) | 2009-02-17 | 2011-12-06 | International Business Machines Corporation | Semantics-based data transformation over a wire in mashups |
US20100235915A1 (en) | 2009-03-12 | 2010-09-16 | Nasir Memon | Using host symptoms, host roles, and/or host reputation for detection of host infection |
CN101729531B (zh) | 2009-03-16 | 2016-04-13 | 中兴通讯股份有限公司 | 网络安全策略分发方法、装置及系统 |
US8754889B2 (en) | 2009-03-18 | 2014-06-17 | National Instruments Corporation | Cursor synchronization in a plurality of graphs |
US8239668B1 (en) | 2009-04-15 | 2012-08-07 | Trend Micro Incorporated | Computer security threat data collection and aggregation with user privacy protection |
US20100306285A1 (en) | 2009-05-28 | 2010-12-02 | Arcsight, Inc. | Specifying a Parser Using a Properties File |
US8966414B2 (en) | 2009-05-29 | 2015-02-24 | Cypress Semiconductor Corporation | Implementing a circuit using an integrated circuit including parametric analog elements |
US9268761B2 (en) | 2009-06-05 | 2016-02-23 | Microsoft Technology Licensing, Llc | In-line dynamic text with variable formatting |
US20100313239A1 (en) | 2009-06-09 | 2010-12-09 | International Business Machines Corporation | Automated access control for rendered output |
KR101076887B1 (ko) | 2009-06-26 | 2011-10-25 | 주식회사 하이닉스반도체 | 반도체 메모리소자의 랜딩플러그 형성방법 |
US8832131B2 (en) | 2009-07-08 | 2014-09-09 | International Business Machines Corporation | System, method, and apparatus for replicating a portion of a content repository using behavioral patterns |
EP2454661A1 (en) | 2009-07-15 | 2012-05-23 | Proviciel - Mlstate | System and method for creating a parser generator and associated computer program |
US8392556B2 (en) | 2009-07-16 | 2013-03-05 | Ca, Inc. | Selective reporting of upstream transaction trace data |
US20110047540A1 (en) | 2009-08-24 | 2011-02-24 | Embarcadero Technologies Inc. | System and Methodology for Automating Delivery, Licensing, and Availability of Software Products |
US8560854B2 (en) | 2009-09-08 | 2013-10-15 | Ricoh Co., Ltd. | Device enabled verifiable stroke and image based workflows |
US8917272B2 (en) | 2009-09-30 | 2014-12-23 | Mckesson Financial Holdings | Methods, apparatuses, and computer program products for facilitating visualization and analysis of medical data |
US8595058B2 (en) | 2009-10-15 | 2013-11-26 | Visa U.S.A. | Systems and methods to match identifiers |
US20110112995A1 (en) | 2009-10-28 | 2011-05-12 | Industrial Technology Research Institute | Systems and methods for organizing collective social intelligence information using an organic object data model |
CN102054015B (zh) | 2009-10-28 | 2014-05-07 | 财团法人工业技术研究院 | 使用有机物件数据模型来组织社群智能信息的系统及方法 |
US8312367B2 (en) | 2009-10-30 | 2012-11-13 | Synopsys, Inc. | Technique for dynamically sizing columns in a table |
US8700577B2 (en) | 2009-12-07 | 2014-04-15 | Accenture Global Services Limited GmbH | Method and system for accelerated data quality enhancement |
US8484259B1 (en) | 2009-12-08 | 2013-07-09 | Netapp, Inc. | Metadata subsystem for a distributed object store in a network storage system |
US20110145187A1 (en) | 2009-12-16 | 2011-06-16 | Sap Ag | Conflict framework for guided structure synchronization |
EP2524299A4 (en) | 2010-01-11 | 2013-11-13 | Panjiva Inc | EVALUATION OF PUBLIC ARCHIVES OF SUPPLY TRANSACTIONS FOR DECISION MAKING OF FINANCIAL INVESTMENTS |
US9026552B2 (en) | 2010-01-18 | 2015-05-05 | Salesforce.Com, Inc. | System and method for linking contact records to company locations |
US8380659B2 (en) | 2010-02-09 | 2013-02-19 | Google Inc. | Method and system for efficiently replicating data in non-relational databases |
US20110208565A1 (en) | 2010-02-23 | 2011-08-25 | Michael Ross | complex process management |
US8863279B2 (en) | 2010-03-08 | 2014-10-14 | Raytheon Company | System and method for malware detection |
US20110225482A1 (en) | 2010-03-15 | 2011-09-15 | Wizpatent Pte Ltd | Managing and generating citations in scholarly work |
US8306846B2 (en) | 2010-04-12 | 2012-11-06 | First Data Corporation | Transaction location analytics systems and methods |
CA2796448C (en) | 2010-04-15 | 2019-02-19 | Mxi Technologies Ltd. | Method and system for deployed operations support |
US20110258216A1 (en) | 2010-04-20 | 2011-10-20 | International Business Machines Corporation | Usability enhancements for bookmarks of browsers |
EP2585964A1 (en) | 2010-06-23 | 2013-05-01 | Koninklijke Philips Electronics N.V. | Interoperability between a plurality of data protection systems |
WO2012003504A2 (en) | 2010-07-02 | 2012-01-05 | Air Computing, Inc. | A system and method for cloud file management |
US8352883B2 (en) | 2010-07-08 | 2013-01-08 | Alexey Kashik | Analysis of complex data objects and multiple parameter systems |
US8554653B2 (en) | 2010-07-22 | 2013-10-08 | Visa International Service Association | Systems and methods to identify payment accounts having business spending activities |
US9495264B2 (en) | 2010-08-09 | 2016-11-15 | Veritas Technologies Llc | Data replication techniques using incremental checkpoints |
US20120065987A1 (en) | 2010-09-09 | 2012-03-15 | Siemens Medical Solutions Usa, Inc. | Computer-Based Patient Management for Healthcare |
US9215548B2 (en) | 2010-09-22 | 2015-12-15 | Ncc Group Security Services, Inc. | Methods and systems for rating privacy risk of applications for smart phones and other mobile platforms |
KR101425107B1 (ko) | 2010-10-29 | 2014-08-01 | 한국전자통신연구원 | 네트워크 도메인간 보안정보 공유 장치 및 방법 |
WO2012071571A2 (en) | 2010-11-26 | 2012-05-31 | Agency For Science, Technology And Research | Method for creating a report from radiological images using electronic report templates |
US20120136839A1 (en) | 2010-11-30 | 2012-05-31 | Peter Eberlein | User-Driven Conflict Resolution Of Concurrent Updates In Snapshot Isolation |
ES2842407T3 (es) | 2010-12-22 | 2021-07-14 | Syqe Medical Ltd | Sistema de administración de fármacos |
US20120197657A1 (en) | 2011-01-31 | 2012-08-02 | Ez Derm, Llc | Systems and methods to facilitate medical services |
US20120197660A1 (en) | 2011-01-31 | 2012-08-02 | Ez Derm, Llc | Systems and methods to faciliate medical services |
US9128804B2 (en) | 2011-02-10 | 2015-09-08 | Software Ag | Systems and/or methods for identifying and resolving complex model merge conflicts based on atomic merge conflicts |
KR101950529B1 (ko) | 2011-02-24 | 2019-02-20 | 렉시스넥시스, 어 디비젼 오브 리드 엘서비어 인크. | 전자 문서를 검색하는 방법 및 전자 문서 검색을 그래픽적으로 나타내는 방법 |
WO2012119008A2 (en) | 2011-03-01 | 2012-09-07 | Early Warning Services, Llc | System and method for suspect entity detection and mitigation |
US9449010B2 (en) | 2011-04-02 | 2016-09-20 | Open Invention Network, Llc | System and method for managing sensitive data using intelligent mobile agents on a network |
US8839434B2 (en) | 2011-04-15 | 2014-09-16 | Raytheon Company | Multi-nodal malware analysis |
US8881101B2 (en) | 2011-05-24 | 2014-11-04 | Microsoft Corporation | Binding between a layout engine and a scripting engine |
US9047441B2 (en) | 2011-05-24 | 2015-06-02 | Palo Alto Networks, Inc. | Malware analysis system |
US8799190B2 (en) | 2011-06-17 | 2014-08-05 | Microsoft Corporation | Graph-based malware classification based on file relationships |
US20130006668A1 (en) | 2011-06-30 | 2013-01-03 | Verizon Patent And Licensing Inc. | Predictive modeling processes for healthcare fraud detection |
US8726379B1 (en) | 2011-07-15 | 2014-05-13 | Norse Corporation | Systems and methods for dynamic protection from electronic attacks |
US8982130B2 (en) | 2011-07-15 | 2015-03-17 | Green Charge Networks | Cluster mapping to highlight areas of electrical congestion |
EP2740058A4 (en) | 2011-08-03 | 2015-04-22 | Amazon Tech Inc | COLLECTING TRANSACTION DATA ASSOCIATED WITH LOCALLY RECORDED DATA FILES |
US8732574B2 (en) | 2011-08-25 | 2014-05-20 | Palantir Technologies, Inc. | System and method for parameterizing documents for automatic workflow generation |
US8807948B2 (en) | 2011-09-29 | 2014-08-19 | Cadence Design Systems, Inc. | System and method for automated real-time design checking |
US20130086482A1 (en) | 2011-09-30 | 2013-04-04 | Cbs Interactive, Inc. | Displaying plurality of content items in window |
US8560494B1 (en) | 2011-09-30 | 2013-10-15 | Palantir Technologies, Inc. | Visual data importer |
US10460238B2 (en) | 2011-10-11 | 2019-10-29 | Leidos Innovations Technology, Inc. | Data quality issue detection through ontological inferencing |
US20130097482A1 (en) | 2011-10-13 | 2013-04-18 | Microsoft Corporation | Search result entry truncation using pixel-based approximation |
US20130124567A1 (en) | 2011-11-14 | 2013-05-16 | Helen Balinsky | Automatic prioritization of policies |
US20130124193A1 (en) | 2011-11-15 | 2013-05-16 | Business Objects Software Limited | System and Method Implementing a Text Analysis Service |
KR101575282B1 (ko) | 2011-11-28 | 2015-12-09 | 한국전자통신연구원 | 보안관리 도메인들 간에 익명 식별자 기반의 보안정보를 공유하기 위한 에이전트 장치 및 방법 |
US9159024B2 (en) | 2011-12-07 | 2015-10-13 | Wal-Mart Stores, Inc. | Real-time predictive intelligence platform |
US20130151305A1 (en) | 2011-12-09 | 2013-06-13 | Sap Ag | Method and Apparatus for Business Drivers and Outcomes to Enable Scenario Planning and Simulation |
US9026480B2 (en) | 2011-12-21 | 2015-05-05 | Telenav, Inc. | Navigation system with point of interest classification mechanism and method of operation thereof |
US8782004B2 (en) | 2012-01-23 | 2014-07-15 | Palantir Technologies, Inc. | Cross-ACL multi-master replication |
US9015207B2 (en) | 2012-03-29 | 2015-04-21 | Touchstone Media Group, Llc | Mobile sales tracking system |
US20130263019A1 (en) | 2012-03-30 | 2013-10-03 | Maria G. Castellanos | Analyzing social media |
US8738665B2 (en) | 2012-04-02 | 2014-05-27 | Apple Inc. | Smart progress indicator |
US8761811B2 (en) | 2012-04-27 | 2014-06-24 | Oracle International Corporation | Augmented reality for maintenance management, asset management, or real estate management |
US20140040714A1 (en) | 2012-04-30 | 2014-02-06 | Louis J. Siegel | Information Management System and Method |
US8925082B2 (en) | 2012-08-22 | 2014-12-30 | International Business Machines Corporation | Cooperative intrusion detection ecosystem for IP reputation-based security |
US20140081652A1 (en) | 2012-09-14 | 2014-03-20 | Risk Management Solutions Llc | Automated Healthcare Risk Management System Utilizing Real-time Predictive Models, Risk Adjusted Provider Cost Index, Edit Analytics, Strategy Management, Managed Learning Environment, Contact Management, Forensic GUI, Case Management And Reporting System For Preventing And Detecting Healthcare Fraud, Abuse, Waste And Errors |
US8688573B1 (en) | 2012-10-16 | 2014-04-01 | Intuit Inc. | Method and system for identifying a merchant payee associated with a cash transaction |
US9081975B2 (en) | 2012-10-22 | 2015-07-14 | Palantir Technologies, Inc. | Sharing information between nexuses that use different classification schemes for information access control |
US8914886B2 (en) | 2012-10-29 | 2014-12-16 | Mcafee, Inc. | Dynamic quarantining for malware detection |
US9501761B2 (en) | 2012-11-05 | 2016-11-22 | Palantir Technologies, Inc. | System and method for sharing investigation results |
US8924910B2 (en) | 2012-11-09 | 2014-12-30 | Analog Devices, Inc. | Filter design tool |
US20140143009A1 (en) | 2012-11-16 | 2014-05-22 | International Business Machines Corporation | Risk reward estimation for company-country pairs |
US20140149130A1 (en) | 2012-11-29 | 2014-05-29 | Verizon Patent And Licensing Inc. | Healthcare fraud detection based on statistics, learning, and parameters |
US10672008B2 (en) | 2012-12-06 | 2020-06-02 | Jpmorgan Chase Bank, N.A. | System and method for data analytics |
US8819604B2 (en) | 2013-01-20 | 2014-08-26 | International Business Machines Corporation | Real-time display of electronic device design changes between schematic and/or physical representation and simplified physical representation of design |
US20140222793A1 (en) | 2013-02-07 | 2014-08-07 | Parlance Corporation | System and Method for Automatically Importing, Refreshing, Maintaining, and Merging Contact Sets |
US20140244284A1 (en) | 2013-02-25 | 2014-08-28 | Complete Consent, Llc | Communication of medical claims |
US8924388B2 (en) | 2013-03-15 | 2014-12-30 | Palantir Technologies Inc. | Computer-implemented systems and methods for comparing and associating objects |
US8855999B1 (en) | 2013-03-15 | 2014-10-07 | Palantir Technologies Inc. | Method and system for generating a parser and parsing complex data |
US8930897B2 (en) | 2013-03-15 | 2015-01-06 | Palantir Technologies Inc. | Data integration tool |
US8903717B2 (en) | 2013-03-15 | 2014-12-02 | Palantir Technologies Inc. | Method and system for generating a parser and parsing complex data |
US9898167B2 (en) | 2013-03-15 | 2018-02-20 | Palantir Technologies Inc. | Systems and methods for providing a tagging interface for external content |
GB2513007A (en) | 2013-03-15 | 2014-10-15 | Palantir Technologies Inc | Transformation of data items from data sources using a transformation script |
CN103281301B (zh) | 2013-04-28 | 2017-02-08 | 上海海事大学 | 云安全恶意程序判断系统及方法 |
US9576248B2 (en) | 2013-06-01 | 2017-02-21 | Adam M. Hurwitz | Record linkage sharing using labeled comparison vectors and a machine learning domain classification trainer |
US8886601B1 (en) | 2013-06-20 | 2014-11-11 | Palantir Technologies, Inc. | System and method for incrementally replicating investigative analysis data |
US9389761B2 (en) | 2013-07-19 | 2016-07-12 | General Electric Company | Systems and methods for dynamically controlling content displayed on a condition monitoring system |
US8838538B1 (en) | 2013-07-31 | 2014-09-16 | Palantir Technologies, Inc. | Techniques for replicating changes to access control lists on investigative analysis data |
US9223773B2 (en) | 2013-08-08 | 2015-12-29 | Palatir Technologies Inc. | Template system for custom document generation |
GB2518745A (en) | 2013-08-08 | 2015-04-01 | Palantir Technologies Inc | Template system for custom document generation |
US9787760B2 (en) | 2013-09-24 | 2017-10-10 | Chad Folkening | Platform for building virtual entities using equity systems |
US8938686B1 (en) | 2013-10-03 | 2015-01-20 | Palantir Technologies Inc. | Systems and methods for analyzing performance of an entity |
US9569070B1 (en) | 2013-11-11 | 2017-02-14 | Palantir Technologies, Inc. | Assisting in deconflicting concurrency conflicts |
US9165100B2 (en) | 2013-12-05 | 2015-10-20 | Honeywell International Inc. | Methods and apparatus to map schematic elements into a database |
US10545986B2 (en) | 2013-12-27 | 2020-01-28 | General Electric Company | Systems and methods for dynamically grouping data analysis content |
US9836502B2 (en) | 2014-01-30 | 2017-12-05 | Splunk Inc. | Panel templates for visualization of data within an interactive dashboard |
US20150235334A1 (en) | 2014-02-20 | 2015-08-20 | Palantir Technologies Inc. | Healthcare fraud sharing system |
US9009827B1 (en) | 2014-02-20 | 2015-04-14 | Palantir Technologies Inc. | Security sharing system |
US9021260B1 (en) | 2014-07-03 | 2015-04-28 | Palantir Technologies Inc. | Malware data item analysis |
US9454281B2 (en) | 2014-09-03 | 2016-09-27 | Palantir Technologies Inc. | System for providing dynamic linked panels in user interface |
US9501851B2 (en) | 2014-10-03 | 2016-11-22 | Palantir Technologies Inc. | Time-series analysis system |
US9984133B2 (en) | 2014-10-16 | 2018-05-29 | Palantir Technologies Inc. | Schematic and database linking system |
US9430507B2 (en) | 2014-12-08 | 2016-08-30 | Palantir Technologies, Inc. | Distributed acoustic sensing data analysis system |
-
2010
- 2010-07-15 US US12/836,801 patent/US8515912B2/en not_active Ceased
-
2011
- 2011-07-13 ES ES11807426T patent/ES2788299T3/es active Active
- 2011-07-13 HU HUE11807426A patent/HUE049983T2/hu unknown
- 2011-07-13 AU AU2011279270A patent/AU2011279270B2/en not_active Ceased
- 2011-07-13 CA CA2806954A patent/CA2806954C/en not_active Expired - Fee Related
- 2011-07-13 WO PCT/US2011/043794 patent/WO2012009397A2/en active Application Filing
- 2011-07-13 PL PL11807426T patent/PL2593881T3/pl unknown
- 2011-07-13 LT LTEP11807426.9T patent/LT2593881T/lt unknown
- 2011-07-13 PT PT118074269T patent/PT2593881T/pt unknown
- 2011-07-13 EP EP20157176.7A patent/EP3680784B1/en active Active
- 2011-07-13 EP EP11807426.9A patent/EP2593881B1/en active Active
- 2011-07-13 DK DK11807426.9T patent/DK2593881T3/da active
-
2012
- 2012-12-19 NZ NZ606233A patent/NZ606233A/en not_active IP Right Cessation
-
2015
- 2015-08-19 US US14/830,420 patent/USRE48589E1/en active Active
Also Published As
Publication number | Publication date |
---|---|
AU2011279270A1 (en) | 2013-01-24 |
WO2012009397A3 (en) | 2012-04-26 |
CA2806954A1 (en) | 2012-01-19 |
EP3680784B1 (en) | 2023-12-13 |
AU2011279270B2 (en) | 2015-09-24 |
CA2806954C (en) | 2017-09-26 |
DK2593881T3 (da) | 2020-06-22 |
EP3680784A1 (en) | 2020-07-15 |
PT2593881T (pt) | 2020-04-24 |
NZ606233A (en) | 2014-01-31 |
WO2012009397A2 (en) | 2012-01-19 |
HUE049983T2 (hu) | 2020-11-30 |
EP2593881A4 (en) | 2016-12-14 |
PL2593881T3 (pl) | 2021-03-08 |
US8515912B2 (en) | 2013-08-20 |
US20120016849A1 (en) | 2012-01-19 |
LT2593881T (lt) | 2020-07-27 |
EP2593881B1 (en) | 2020-03-18 |
EP2593881A2 (en) | 2013-05-22 |
USRE48589E1 (en) | 2021-06-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
ES2788299T3 (es) | Compartición y resolución de conflictos de cambios de datos en un sistema de bases de datos multimaestro | |
AU2019213302B2 (en) | Filtering data lineage diagrams | |
US20180004832A1 (en) | System and method for incremental replication | |
US10067954B2 (en) | Use of dynamic dictionary encoding with an associated hash table to support many-to-many joins and aggregations | |
US9928310B2 (en) | In-memory graph pattern matching | |
AU2016219421B2 (en) | Filtering data lineage diagrams | |
JP6608972B2 (ja) | ソーシャルネットワークに基づいてグループを探索する方法、デバイス、サーバ及び記憶媒体 | |
US20180276269A1 (en) | Transaction processing in distributed database management system | |
US10970256B2 (en) | Reconciler for a distributed storage system | |
US20220311757A1 (en) | Cross-regional replication of keys | |
US20150026081A1 (en) | Method and system for managing standards | |
US20160314221A1 (en) | Augmenting the display of data in a tree format | |
US20200160940A1 (en) | Molecular structure editor with version control and simultaneous editing operations | |
Noor et al. | Survey on replication techniques for distributed system | |
US7606825B1 (en) | Method and apparatus for presenting objects in an arranged fashion | |
US12124598B2 (en) | Copy discovery of clustered assets in node agnostic way | |
US20240028464A1 (en) | Copy discovery of clustered assets in node agnostic way | |
US12126604B2 (en) | Cross-regional replication of keys | |
Sharma | Cosmos DB for MongoDB Developers | |
Mohd Noor et al. | Survey on replication techniques for distributed system. | |
CN106325777A (zh) | 一种逻辑单元管理方法及系统 | |
Hunt | Natural or Artificial Primary Key? Using the Mifrenz childrens email application as a case study. | |
Kabaso et al. | Disconnected Architectures for use in Connectivity Constrained Environment in Africa |