> Does the Palm store details of which fields have changed over and above > the simple setting of the "dirty" flag on a modified record ?
As you probably know, there are two ways of sync'ing, Fast and Slow. (and Judd can probably help here also): 1. Fast syncing is when the same Palm syncronizes to the same desktop or laptop or networkd system all the time. Most people believe this is the "norm". In this situation, you can reasonably assume that all of the proper modify/archive/delete bits on the Palm are accurate. What's required: a. Iterate through the desktop data with a local dektop-resident conduit which looks at a locally-stored instance of the Palm data. b. Iterate through the Palm data. For each changed record on the Palm, the conduit should be treated as follows: i. Archived records should be added to a queue or local database on the desktop and mark it as a pending delete on the desktop, then delete the record from the Palm ii. Deleted records are marked as a pending delete in the desktop database and the record is removed from the Palm. It's important to note that records aren't actually "deleted" on the Palm until a sync occurs, even though you may not see them through the Palm UI any longer, they're still there until a sync removes them. iii. Modified records on the Palm are modified locally in the desktop database/storage structure (in our case, XML for this example) iv. New records create on the Palm are simply created on the desktop side as well at sync time c. Compare the local data with the remote (Palm) data i. Archived records are removed from the Palm and puts the entry in an "Archived" database/structure on the desktop and marks it as a pending delete on the desktop ii. Deleted records are removed from the Palm and marked as a pending delete in the desktop database/structure iii. Modified records will replicate the modifications to the Palm and then clear the modification flag from the record in the desktop database/structure iv. New records will have the contents copied to the Palm and then should clear the 'Added' flag from the same record in the desktop database/structure At this point, any records marked for pending deletion or deletion are purged from the desktop data and both Palm and desktop should match, record-for-record. Once the modifications are confirmed, all deletes acted upon, and new records replicated in the right direction, the temporary storage is then copied over to "permanent" storage. The existing local data prior to this commit is stored as well, and is used for a Slow Sync. 2. Slow syncing is what happens when one Palm is syncronized with more than one system or desktop. One example is syncronizing your Palm with your work computer, then coming home and syncronizing it with your home computer. In this situation, the modify/archive/delete flags are not going to be useful to the second system you sync to, because there is no reference there to validate them. In order to find out what was changed, despite what the Palm data says, we need to have a delta between current data and "last snapshot" of that data. The tertiary database we copied back after doing s "Fast Sync" above can be used for this. This should give us an accurate picture of the last time the Palm and the desktop matched exactly. In the time since this last sync with this desktop, the data on either desktop or Palm may have changed. All of the bits in the desktop data will still remain relevant, but the bits in the Palm data are no longer useful, since they would have been changed/updated/etc. when that Palm was sync'd to desktop_2. To do this properly, the desktop conduit must read each record on the Palm into memory or a structure for comparison against that tertiary "backup" database that we saved during our Fast Sync. Palm, Inc. calls this the "remote database". Let's use 'rdb' for short here (where 'ldb' would stand for 'local database'). What's required: a. Records in rdb and Palm match, no changes are made to either unit. b. The rdb has no record, but the Palm does. This record is considered "new" and marked as modified in the rdb. c. The backup record is missing from the rdb, the record in the rdb was deleted or archived, and the record is marked as deleted. d. The backup record and the record in the rdb are not the same, with the record in the rdb having been modified. The record is marked as "changed" on the Palm. There are a few situations where this gets ugly. a. A record is deleted on the Palm and deleted on the desktop (or vice versa). What we should do is remove the deleted record and the changed record is copied to the opposite device. b. A record is archived in one database and changed in the other. The archived version of the record is put into the archive db (adb) and the changed copy is copied to the other device. c. A record is archived in one device, and deleted on the other. In this case, we should just put the record into the adb. d. Records are changed in both places (desktop and Palm), but changed differently in exactly the same location. In this case, you'd end up with two records, each full copies of the other with the addition of the "discrepant" information. e. A record is changed identically in both locations. Ideally this should result in only one record existing in both locations, an exact duplicate of the other. The "Slow Sync" is much slower because every record has to be copied to the desktop with the conduit and compared to the data found there when it arrives. > Whilst I can see how a DESKTOP app might allow for the setting of a > dirty flag as an attribute at the "field" level, in the case you > describe above, how would you know (flag) which field had changed on the > Palm ? The comparison has to happen at the desktop when doing a slow sync as above. Fast sync in this case wouldn't require atomic syncs to happen. > Unless you keep a clean copy of the last-sync'd (clean) record, as well > as the Desktop changes, you have no way to tell what has changed > (rather, compute the sum of the changes). You have to keep a clean copy, or else sync becomes useless. > Consider the case where you change the same piece of info (field) on > both the Desktop app and the Palm but the changes which are made are not > the same. Dont you need the equivalent of transaction logs on both sides > of the conduit to work out the complete set of changes ? You only need Palm data, desktop data, and "archive" data for this comparison to derive a delta between the "Last Known Good" sync and the one currently being enqueued. > So, I guess my underlying question is: is there any other info that can > be used to identify records and/or changes to them in the way you > suggest: maybe I missed something ? I'm still thinking through this. Neal and some other people seem to think we may be able to get a bit more async with these devices, and the results I've seen with similar devices using similar ports and protocols alludes to this. It would speed up things slightly. However, this can even be made faster at the desktop level by a simple "pre-parse" at sync time. When you initiate a sync, the local copies of the data are "diffed" for differences, and the delta between *THEM* is what the Palm data is compared against. Let me chew on this a for a bit, I'm sure I'm missing some glaring hole in the design here. Can anyone else find some holes in this approach so far? /d _______________________________________________ Pilot-unix mailing list [EMAIL PROTECTED] http://hcirisc.cs.binghamton.edu/mailman/listinfo/pilot-unix