The subject invention relates generally to computers and more particularly toward synchronization between computer data stores through an intermediary store.
Individuals these days utilize a myriad of computer devices or systems on a regular basis. For example, individuals can have a desktop computer and/or associated file server with which they interact at work. They can also have a laptop computer for working away from the office as well as one or more desktop computers at home. Furthermore, they may have palm top computers such as a personal digital assistant (PDA), pocket PCs, mobile phones and/or other portable devices they utilize for organizational, communication, or entertainment purposes. It is desirous that some data be copied to multiple devices to enable convenient access thereto. For instance, often a user copies files from a desktop computer or file server to a portable computer or device for use while the user is away from their office. The user then likely modifies or adds some new files while away from the office and subsequently needs to copy these files to their desktop computer or file server when they return to the office. Similarly, users may wish to copy pictures or music from one device to another (e.g., computer to MP3 player, digital camera to computer . . . ). Still further yet, users may demand that personal preferences and contacts (e.g., address book) be maintained across all or a subset of their computers. Thus, certain files need to be synchronized across multiple computers or devices.
In its simplest form, synchronization is merely the task of making designated files from multiple devices systems the same or consistent across systems. Typically, this means that the most up to data file versions are used to copy to a store. This process is automated by two-way, peer-to-peer, synchronization software applications. In particular, upon activation, a synchronization application can detect file changes or additions on a first device and copy or replicate new and/or altered files to a second device communicatively coupled to the first device, for instance via a hardwired or wireless connection. This causes the files on the first device to be synchronized with files on the second device.
Synchronization can also be performed remotely by accessing a network having a first device such as desktop computer coupled thereto. A second device such as a second desktop computer or laptop computer can be synchronized with the first device utilizing synchronization software. However, the synchronization software requires that both the first and second devices be powered-up and communicatively coupled to each other by way of the network. In this way, they communicate directly with each other similar to direct hardwired connection.
The following presents a simplified summary of the invention in order to provide a basic understanding of some aspects of the invention. This summary is not an extensive overview of the invention. It is not intended to identify key/critical elements of the invention or to delineate the scope of the invention. Its sole purpose is to present some concepts of the invention in a simplified form as a prelude to the more detailed description that is presented later.
Briefly described the subject invention concerns data synchronization amongst one or more client systems utilizing an intermediary storage system. More particularly, the invention pertains to synchronization of items including file-backed and non-filed-backed items as well as other data entities. Change packets can be generated for designated new, altered or deleted entries. These packets can be generated by an interface component included or associated with a client system and transmitted for storage to an intermediary or shared storage system such as a file share server. These stored change packets can then be utilized to synchronize a plurality of client devices.
According to an aspect of the invention, the change packet can include change data, prerequisite knowledge, learned knowledge and made-with knowledge, among other things. Change data can specify changes to be made to an item. According to an aspect of the subject invention, change data can include a complete replica of particular types of data or data entities, which can be saved or serialized to the shared store. Only a single replica or single data instance is stored on the share. Older versions will be replaced with the latest version. The change data for an item or other data entity can include just changes that need to be effectuated rather than a complete replica. Prerequisite knowledge is the knowledge or set of changes that synchronization client must know in order to apply the changes provided by the change packet. Learned knowledge specifies what the synchronization client will learn if it applies the changes. Made-with knowledge carries the knowledge which client knew when item was created.
According to an aspect of the subject invention, the synchronization interface can include a conflict detection component. The conflict detection component can detect a conflict by comparing client system knowledge and intermediary store knowledge for a particular data entity. If a conflict is detected, a conflict event or knowledge exception can be raised, and a client system user or client system application can resolve the conflict.
In accordance with another aspect of the invention, the synchronization interface can include a conflict resolution component that can resolve detected conflicts automatically in accordance with a conflict resolution policy. This can enable conflicts to be resolved much quicker as well as facilitating convergence on the same resolution across different client systems.
In accordance with an aspect of the invention, the interface can employ a data integrity component and associated methods to lock data during reads and writes to ensure data is not compromised.
Systems and methods are also provided, in accordance with an aspect of the invention, to enable interoperability between an intermediary change packet store and an item store. For instance, systems and methods are provided to facilitate updating the intermediary change packet store with data packets and single instance data replicas upon detection of a designated entity change. Furthermore, systems and methods are disclosed to facilitate synchronizing client system stores utilizing data provided by the change packet store.
According to another aspect of the invention, the interface component can include a means and mechanism for retrieving and copying single instance data of any size to the shared store.
To the accomplishment of the foregoing and related ends, certain illustrative aspects of the invention are described herein in connection with the following description and the annexed drawings. These aspects are indicative of various ways in which the invention may be practiced, all of which are intended to be covered by the present invention. Other advantages and novel features of the invention may become apparent from the following detailed description of the invention when considered in conjunction with the drawings.
The present invention is now described with reference to the annexed drawings, wherein like numerals refer to like or corresponding elements throughout. It should be understood, however, that the drawings and detailed description thereto are not intended to limit the invention to the particular form disclosed. Rather, the intention is to cover all modifications, equivalents, and alternatives falling within the spirit and scope of the present invention.
As used in this application, the terms “component” and “system” and the like are intended to refer to a computer-related entity, either hardware, a combination of hardware and software, software, or software in execution. For example, a component may be, but is not limited to being, a process running on a processor, a processor, an object, an instance, an executable, a thread of execution, a program, and/or a computer. By way of illustration, both an application running on a computer and the computer can be a component. One or more components may reside within a process and/or thread of execution and a component may be localized on one computer and/or distributed between two or more computers.
“File” as used herein describes a conventional discrete unit of data including but not limited to a traditional file or file stream. Such a file can include but is not limited to a music file (e.g., MP3, MP4, WMA . . . ), a picture file (e.g., Jpeg, Gif, Mpeg . . . ), and a word processing document (e.g., doc, text, PDF, PostScript, RTF . . . ). Conventional file format can include rich metadata including not only their name and size but also properties and attributes embedded within the data unit. However, such rich metadata is conventionally only accessible by particular programs. For example, metadata identifying an artist and song title associated with a music file would require an audio player application to retrieve such metadata.
The term “item” as used herein is a discrete unit of data storable in a data store that can be manipulated by hardware, software, or a combination of hardware and software. Items are stand-alone objects that can be stored, retrieved, copied, deleted, moved, opened, printed, backed up, and restored, among other things. An item can be a regular non-file-backed item or a file-backed item. A non-file-backed item, or simply an item, is a schematized object that can comprise one or more elements and relationships. An element is an instance of a type comprising one or more fields (also referred to herein as a property). A relationship is a link between two or more items. A file-backed item acts as a bridge between legacy file format and the richly schematized item. A file-backed item can be any item that relies on a file to populate some or all of its properties. In particular, the file-backed item can include metadata associated with a file as well as the file stream itself.
The term “entity,” “data entity,” and the like as utilized herein is meant to include and refer to items (e.g., file-backed, non-file-backed), legacy files and any other discrete data unit or container.
The word “exemplary” is used herein to mean serving as an example, instance, or illustration. Any aspect or design described herein as “exemplary” is not necessarily to be construed as preferred or advantageous over other aspects or designs.
Artificial intelligence based systems (e.g., explicitly and/or implicitly trained classifiers) can be employed in connection with performing inference and/or probabilistic determinations and/or statistical-based determinations as in accordance with one or more aspects of the subject invention as described hereinafter. As used herein, the term “inference” or “infer” refers generally to the process of reasoning about or inferring states of the system, environment, and/or user from a set of observations as captured via events and/or data. Inference can be employed to identify a specific context or action, or can generate a probability distribution over states, for example. The inference can be probabilistic—that is, the computation of a probability distribution over states of interest based on a consideration of data and events. Inference can also refer to techniques employed for composing higher-level events from a set of events and/or data. Such inference results in the construction of new events or actions from a set of observed events and/or stored event data, whether or not the events are correlated in close temporal proximity, and whether the events and data come from one or several event and data sources. Various classification schemes and/or systems (e.g., support vector machines, neural networks, expert systems, Bayesian belief networks, fuzzy logic, data fusion engines . . . ) can be employed in connection with performing automatic and/or inferred action in connection with the subject invention.
Furthermore, the present invention may be implemented as a method, apparatus, or article of manufacture using standard programming and/or engineering techniques to produce software, firmware, hardware, or any combination thereof to control a computer to implement the disclosed invention. The term “article of manufacture” as used herein is intended to encompass a computer program accessible from any computer-readable device, carrier, or media. For example, computer readable media can include but are not limited to magnetic storage devices (e.g., hard disk, floppy disk, magnetic strips . . . ), optical disks (e.g., compact disk (CD), digital versatile disk (DVD) . . . ), smart cards, and flash memory devices (e.g., card, stick, key drive . . . ). Additionally it should be appreciated that a carrier wave can be employed to carry computer-readable electronic data such as those used in transmitting and receiving electronic mail or in accessing a network such as the Internet or a local area network (LAN). Of course, those skilled in the art will recognize many modifications may be made to this configuration without departing from the scope or spirit of the subject invention.
Turning initially to
The client system 110 can include an interface component 114. Among other things, interface component 114 can facilitate communication between a sync client system 110 and an intermediary storage system 120. Storage system 120 stores data that facilitates synchronization of two or more client devices 110. Accordingly, intermediary storage system 120 can include a data store 222. The intermediary storage system 120 can be any data storage facility that can be access by clients 110. According to one aspect of the invention the intermediary storage system 120 can be a simple file share server, among other things. For example, the intermediary could also be but is not limited to a email or exchange server. The storage system 120 need not operate on data. Rather, the storage system 120 can simply make the data stored therein accessible and available to client devices 110. Furthermore, intermediary storage system 120 need not be proximate to the clients 110. It can be accessed over a local area network (LAN) or a wide area network (WAN) such as the Internet. Client systems 110 can interface with intermediary storage system 120 through the interface component 114. These interface components 114 can be specifically designed or tailored to interact with the client device data store 112 and the associated data storage platform. Accordingly, client devices 110 of varying data storage platforms can be synchronized through the intermediary storage system 120.
In accordance with an aspect of the invention, interface component 114 can ensure that only the most recent version of data with all changes is stored on the intermediary storage system 120. An alternative system could store each data version on the intermediary storage system 120, however this approach is inefficient and unnecessarily ties up storage space. For example, if a gigabyte item was changed twenty times then the intermediary storage system 120 would have to store twenty-gigabyte data entities. The interface component 114 replaces previous versions of with the most recent version. However, synchronization conflicts can occur. For example, the intermediate data store can receive a data item which although later in time than a store copy does not account for or is not aware of previous data alterations. Interface component 114 can include a conflict detection component 116 to detect those and other synchronization conflicts. Upon detection of a conflict, conflict detection component can prevent the interface component 114 from applying the data entity or the changes thereto to the intermediary storage system 120.
Turning to
It should further be appreciated that the data integrity component 310 can be employed with respect to a group of data items. Changes to an intermediary store and synchronization do not often occur at a single data item level. Furthermore, data items can be grouped or related in a particular manner. Accordingly, conflict component 116 and data integrity component 310 can receive and operate on a collection of data items in a transactional batch process or multiple processes. For example, data integrity component 310 can apply locks and remove locks to a batch of items.
Turning to
Communications between the client devices 110 (
Turning to
The remaining two illustrated attributes 514 and 516 pertain to synchronization knowledge. Knowledge represents the state of a given sync item replica at any time. Such knowledge can encapsulate metadata about all the changes a given replica is aware of, either local or from other replicas. Knowledge for synchronization replicas can be maintained and updated across synchronization operations (e.g., send, receive . . . ). Furthermore, it should be appreciated that the knowledge representation allows it to be interpreted with respect to the entire community and not just relative to the particular replica where the knowledge is stored. Prerequisite knowledge attribute 514 specifies what knowledge a synchronization peer (client system, intermediary storage system . . . ) must already know to in order to apply an associated change. In particular, knowledge is related to the set of changes of which the peer is aware. Such knowledge can be employed to determine if a change can be applied and in conjunction with conflict detection. Learned knowledge attribute 516 specifies what a synchronization peer will learn if it applies the associated change. It should be appreciated that other information can be provided by the change packet 510, which is not illustrated. For example, the change packet 510 can include a made-with knowledge attribute that carries the knowledge, which a client knew when item was created.
Turning to
In view of the exemplary systems described supra, methodologies that may be implemented in accordance with the present invention will be better appreciated with reference to the flow charts of
Additionally, it should be further appreciated that the methodologies disclosed hereinafter and throughout this specification are capable of being stored on an article of manufacture to facilitate transporting and transferring such methodologies to computers. The term article of manufacture, as used herein, is intended to encompass a computer program accessible from any computer-readable device, carrier, or media.
Turning to
Furthermore, it should be appreciated that locks could be applied in conjunction with method 1200 to ensure transactional integrity. In particular, the lock can be applied at the onset of this method to prevent writes to the data and subsequently release after the data is read or updated. The lock need only prevent writes, as multiple reads can be executed concurrently supporting simultaneous synchronization without jeopardizing data integrity. By way of example, consider the following exemplary psuedocode implementation of aspects of method 1200:
It should also be appreciated that both the send and receive methodologies of methods 1100 and 1200 can be combined to produce a hybrid send and receive method.
In order to provide a context for the various aspects of the invention,
With reference to
The system bus 1418 can be any of several types of bus structure(s) including the memory bus or memory controller, a peripheral bus or external bus, and/or a local bus using any variety of available bus architectures including, but not limited to, 10-bit bus, Industrial Standard Architecture (ISA), Micro-Channel Architecture (MSA), Extended ISA (EISA), Intelligent Drive Electronics (IDE), VESA Local Bus (VLB), Peripheral Component Interconnect (PCI), Universal Serial Bus (USB), Advanced Graphics Port (AGP), Personal Computer Memory Card International Association bus (PCMCIA), and Small Computer Systems Interface (SCSI).
The system memory 1416 includes volatile memory 1420 and nonvolatile memory 1422. The basic input/output system (BIOS), containing the basic routines to transfer information between elements within the computer 1412, such as during start-up, is stored in nonvolatile memory 1422. By way of illustration, and not limitation, nonvolatile memory 1422 can include read only memory (ROM), programmable ROM (PROM), electrically programmable ROM (EPROM), electrically erasable ROM (EEPROM), or flash memory. Volatile memory 1420 includes random access memory (RAM), which acts as external cache memory. By way of illustration and not limitation, RAM is available in many forms such as synchronous RAM (SRAM), dynamic RAM (DRAM), synchronous DRAM (SDRAM), double data rate SDRAM (DDR SDRAM), enhanced SDRAM (ESDRAM), Synchlink DRAM (SLDRAM), and direct Rambus RAM (DRRAM).
Computer 1412 also includes removable/non-removable, volatile/non-volatile computer storage media.
It is to be appreciated that
A user enters commands or information into the computer 1412 through input device(s) 1436. Input devices 1436 include, but are not limited to, a pointing device such as a mouse, trackball, stylus, touch pad, keyboard, microphone, joystick, game pad, satellite dish, scanner, TV tuner card, digital camera, digital video camera, web camera, and the like. These and other input devices connect to the processing unit 1414 through the system bus 1418 via interface port(s) 1438. Interface port(s) 1438 include, for example, a serial port, a parallel port, a game port, and a universal serial bus (USB). Output device(s) 1440 use some of the same type of ports as input device(s) 1436. Thus, for example, a USB port may be used to provide input to computer 1412 and to output information from computer 1412 to an output device 1440. Output adapter 1442 is provided to illustrate that there are some output devices 1440 like displays (e.g., flat panel and CRT), speakers, and printers, among other output devices 1440 that require special adapters. The output adapters 1442 include, by way of illustration and not limitation, video and sound cards that provide a means of connection between the output device 1440 and the system bus 1418. It should be noted that other devices and/or systems of devices provide both input and output capabilities such as remote computer(s) 1444.
Computer 1412 can operate in a networked environment using logical connections to one or more remote computers, such as remote computer(s) 1444. The remote computer(s) 1444 can be a personal computer, a server, a router, a network PC, a workstation, a microprocessor based appliance, a peer device or other common network node and the like, and typically includes many or all of the elements described relative to computer 1412. For purposes of brevity, only a memory storage device 1446 is illustrated with remote computer(s) 1444. Remote computer(s) 1444 is logically connected to computer 1412 through a network interface 1448 and then physically connected via communication connection 1450. Network interface 1448 encompasses communication networks such as local-area networks (LAN) and wide-area networks (WAN). LAN technologies include Fiber Distributed Data Interface (FDDI), Copper Distributed Data Interface (CDDI), Ethernet/IEEE 802.3, Token Ring/IEEE 802.5 and the like. WAN technologies include, but are not limited to, point-to-point links, circuit-switching networks like Integrated Services Digital Networks (ISDN) and variations thereon, packet switching networks, and Digital Subscriber Lines (DSL).
Communication connection(s) 1450 refers to the hardware/software employed to connect the network interface 1448 to the bus 1418. While communication connection 1450 is shown for illustrative clarity inside computer 1412, it can also be external to computer 1412. The hardware/software necessary for connection to the network interface 1448 includes, for exemplary purposes only, internal and external technologies such as, modems including regular telephone grade modems, cable modems, power modems and DSL modems, ISDN adapters, and Ethernet cards.
What has been described above includes examples of the present invention. It is, of course, not possible to describe every conceivable combination of components or methodologies for purposes of describing the present invention, but one of ordinary skill in the art may recognize that many further combinations and permutations of the present invention are possible. Accordingly, the present invention is intended to embrace all such alterations, modifications and variations that fall within the spirit and scope of the appended claims. Furthermore, to the extent that the terms “includes,” “has,” and “having” are used in either the detailed description or the claims, such term is intended to be inclusive in a manner similar to the term “comprising” as “comprising” is interpreted when employed as a transitional word in a claim.
This is a continuation-in-part of U.S. application Ser. No. 10/889,423, entitled SYSTEMS AND METHODS FOR SYNCHRONIZING COMPUTER SYSTEMS THROUGH AN INTERMEDIARY FILE SYSTEM SHARE OR DEVICE, filed Jul. 12, 2004, which claims the benefit of U.S. Provisional Application Ser. No. 60/567,141 entitled SYSTEMS AND METHODS FOR SYNCHRONIZING COMPUTER SYSTEMS THROUGH AN INTERMEDIARY FILE SYSTEM SHARE OR DEVICE, filed Apr. 30, 2004. The entireties of these applications are incorporated herein by reference.
Number | Name | Date | Kind |
---|---|---|---|
5081070 | Yokoyama | Jan 1992 | A |
5710922 | Alley | Jan 1998 | A |
5740533 | Lin | Apr 1998 | A |
5745481 | Phillips | Apr 1998 | A |
5774717 | Porcaro | Jun 1998 | A |
5806074 | Souder | Sep 1998 | A |
5842213 | Odom | Nov 1998 | A |
5870765 | Bauer et al. | Feb 1999 | A |
5893106 | Brobst et al. | Apr 1999 | A |
5900870 | Malone et al. | May 1999 | A |
5937402 | Pandit | Aug 1999 | A |
5961590 | Mendez | Oct 1999 | A |
6006234 | Govindarajan | Dec 1999 | A |
6047291 | Anderson et al. | Apr 2000 | A |
6085192 | Mendez | Jul 2000 | A |
6108004 | Medl | Aug 2000 | A |
6112024 | Almond et al. | Aug 2000 | A |
6131096 | Ng | Oct 2000 | A |
6151606 | Mendez | Nov 2000 | A |
6182044 | Fong | Jan 2001 | B1 |
6199195 | Goodwin et al. | Mar 2001 | B1 |
6240414 | Beizer | May 2001 | B1 |
6265773 | Kinsman | Jul 2001 | B1 |
6295541 | Bodnar et al. | Sep 2001 | B1 |
6317754 | Peng | Nov 2001 | B1 |
6324533 | Agrawal | Nov 2001 | B1 |
6338056 | Dessloch et al. | Jan 2002 | B1 |
6343287 | Kumar | Jan 2002 | B1 |
6352432 | Tsai | Mar 2002 | B1 |
6370541 | Chou et al. | Apr 2002 | B1 |
6393434 | Huang | May 2002 | B1 |
6430564 | Judge | Aug 2002 | B1 |
6438545 | Beauregard | Aug 2002 | B1 |
6477527 | Carey | Nov 2002 | B2 |
6477564 | Freyssinet et al. | Nov 2002 | B1 |
6519597 | Cheng et al. | Feb 2003 | B1 |
6534723 | Asai | Mar 2003 | B1 |
6545209 | Flannery | Apr 2003 | B1 |
6553391 | Goldring | Apr 2003 | B1 |
6556983 | Altschuler et al. | Apr 2003 | B1 |
6564228 | O'Connor | May 2003 | B1 |
6578046 | Chang et al. | Jun 2003 | B2 |
6643652 | Helgeson | Nov 2003 | B2 |
6671757 | Multer et al. | Dec 2003 | B1 |
6694336 | Multer et al. | Feb 2004 | B1 |
6697818 | Li et al. | Feb 2004 | B2 |
6701314 | Conover | Mar 2004 | B1 |
6701345 | Carley | Mar 2004 | B1 |
6704743 | Martin | Mar 2004 | B1 |
6708221 | Mendez | Mar 2004 | B1 |
6721871 | Piispanen | Apr 2004 | B2 |
6738789 | Multer et al. | May 2004 | B2 |
6757696 | Multer et al. | Jun 2004 | B2 |
6763350 | Agrawal et al. | Jul 2004 | B2 |
6772178 | Mandal et al. | Aug 2004 | B2 |
6801604 | Maes | Oct 2004 | B2 |
6851089 | Erickson | Feb 2005 | B1 |
6857053 | Bolik et al. | Feb 2005 | B2 |
6892210 | Erickson | May 2005 | B1 |
6895586 | Brasher | May 2005 | B1 |
6920452 | Dieberger | Jul 2005 | B2 |
6934710 | Mills | Aug 2005 | B1 |
6976027 | Cutlip | Dec 2005 | B2 |
6983293 | Wang | Jan 2006 | B2 |
6987222 | Deeds | Jan 2006 | B2 |
6990513 | Belfiore | Jan 2006 | B2 |
6999956 | Mullins | Feb 2006 | B2 |
7013313 | LaRue | Mar 2006 | B1 |
7039679 | Mendez | May 2006 | B2 |
7089293 | Grosner | Aug 2006 | B2 |
7089298 | Nyman | Aug 2006 | B2 |
7099896 | Fields | Aug 2006 | B2 |
7099932 | Frenkel | Aug 2006 | B1 |
7143420 | Radhakrishnan | Nov 2006 | B2 |
7146385 | Bruce | Dec 2006 | B1 |
7158962 | Nelson | Jan 2007 | B2 |
7177843 | Nguyen | Feb 2007 | B2 |
7178100 | Call | Feb 2007 | B2 |
7237045 | Beckman | Jun 2007 | B2 |
7243103 | Murphy | Jul 2007 | B2 |
7254574 | Cunningham | Aug 2007 | B2 |
7272598 | Cunningham | Sep 2007 | B2 |
7349913 | Clark | Mar 2008 | B2 |
7483923 | Novik | Jan 2009 | B2 |
7512638 | Jhaveri | Mar 2009 | B2 |
20010044805 | Multer et al. | Nov 2001 | A1 |
20020091702 | Mullins | Jul 2002 | A1 |
20020112045 | Nirkhe | Aug 2002 | A1 |
20020143521 | Call | Oct 2002 | A1 |
20020152422 | Sharma et al. | Oct 2002 | A1 |
20020156792 | Gombocz | Oct 2002 | A1 |
20020184163 | Lotter | Dec 2002 | A1 |
20020198891 | Li | Dec 2002 | A1 |
20030110189 | Agrawal | Jun 2003 | A1 |
20030144849 | Kaivaya | Jul 2003 | A1 |
20030158839 | Faybishenko et al. | Aug 2003 | A1 |
20040024795 | Hind | Feb 2004 | A1 |
20040025110 | Hu | Feb 2004 | A1 |
20040055441 | Katsuta | Mar 2004 | A1 |
20040073560 | Edwards | Apr 2004 | A1 |
20040177744 | Strasser | Sep 2004 | A1 |
20040199521 | Anglin | Oct 2004 | A1 |
20040267834 | Sasaki | Dec 2004 | A1 |
20040268240 | Vincent | Dec 2004 | A1 |
20050065977 | Benson | Mar 2005 | A1 |
20050256907 | Novik | Nov 2005 | A1 |
Number | Date | Country |
---|---|---|
0974895 | Jan 2000 | EP |
02075539 | Sep 2002 | WO |
Number | Date | Country | |
---|---|---|---|
20050246389 A1 | Nov 2005 | US |
Number | Date | Country | |
---|---|---|---|
60567141 | Apr 2004 | US |
Number | Date | Country | |
---|---|---|---|
Parent | 10889423 | Jul 2004 | US |
Child | 11110159 | US |