![]() | |
#1
| |||
| |||
|
#2
| |||
| |||
|
|
Hi, Just wondering... the Objectivity docs says the OID may change if the object moves to a different page. But I plan to cache objects in the Java client (i.e. hold a list of Persons in a listbox.) I have a middle tier that serializes the objects to Java clients. That is, Objectivity doesn't know about my true clients. But if another client suddently changes the object so that Objectivity moves it to another page, the OID changes and my client's OID is invalidated! Isn't this a flawed design? |
#3
| |||
| |||
|
|
Hi, Just wondering... the Objectivity docs says the OID may change if the object moves to a different page. But I plan to cache objects in the Java client (i.e. hold a list of Persons in a listbox.) I have a middle tier that serializes the objects to Java clients. That is, Objectivity doesn't know about my true clients. But if another client suddently changes the object so that Objectivity moves it to another page, the OID changes and my client's OID is invalidated! Isn't this a flawed design? |
#4
| |||
| |||
|
|
Hi, Just wondering... the Objectivity docs says the OID may change if the object moves to a different page. But I plan to cache objects in the Java client (i.e. hold a list of Persons in a listbox.) I have a middle tier that serializes the objects to Java clients. That is, Objectivity doesn't know about my true clients. But if another client suddently changes the object so that Objectivity moves it to another page, the OID changes and my client's OID is invalidated! Isn't this a flawed design? |
#5
| |||
| |||
|
|
The OID would change if your application moves the object. An object update doesn't change the OID. I don't think you ever run into a problem unless you delete or move an object. An OID compares somewhat to a C/C++ pointer. Both constructs point to an object ... if the object is gone ==> your pointer is stale. Markus. "hantheman" <hantheman12 (AT) hotmail (DOT) com> wrote in message news:580fae16.0312140453.4f548376 (AT) posting (DOT) google.com... Hi, Just wondering... the Objectivity docs says the OID may change if the object moves to a different page. But I plan to cache objects in the Java client (i.e. hold a list of Persons in a listbox.) I have a middle tier that serializes the objects to Java clients. That is, Objectivity doesn't know about my true clients. But if another client suddently changes the object so that Objectivity moves it to another page, the OID changes and my client's OID is invalidated! Isn't this a flawed design? |
#6
| |||
| |||
|
|
OID in general is flawed. However, spontaneously changing OID's would seem more than a little over the top. |
#7
| |||
| |||
|
|
In other words, OID is just a physical pointer. |
#8
| |||
| |||
|
|
"Bob Badour" <bbadour (AT) golden (DOT) net> wrote in message news:6Lydndcs1cpKv0CiRVn-tA (AT) golden (DOT) net... In other words, OID is just a physical pointer. In Objectivity/DB an OID is a physical pointer. This provides for excellent performance at the expense of not being able to move the objects around in the repository freely. Other databases, like Versant, use logical OIDs, which allow the objects to be moved around more easily, but also are impacted by the expense of a redirect table lookup. --Corey |
#9
| |||
| |||
|
|
Objectivity's OID is not a purely physical pointer. There are actually a three logical to physical indirections. It's easy to think it's a physical pointer when using it because of the speed of the look-ups, but it's not. The first 16-bit field of the 64-bit OID represents the "database", which is actually a catalog of files, which allows you to distribute and redistribute a federation of databases without changing object IDs. The second 16-bit field is a container ID that is physical within the database. The third field is another logical page ID that is mapped to a physical page. This allows Objectivity to change the object (including its size) without changing the logical OID, and is a critical difference between Objectivity and hierarchical and network databases. This indirection also allows Objectivity to provide multiple versions (consistent and atomic views) of the database while it's being updated. The fourth field is a slot, which is has another logical to physical indirection that allows Objectivity to defragment pages and move objects within a page. The logical OID is permanent for the life of the object unless the object needs to be moved to a different container. Since containers can grow to 4GB, this is rarely a problem. Versant's problem (in my opinion) is that there's a single centralized logical to physical indirection, which leads to performance and scalability limitations. There's an obvious trade-off between physical pointers and logical IDs (all of which ultimately resolve to physical pointers). If the pointers are too physical, there's inflexibility. If there are too many layers of indirection or the indirection is completely hidden from the application, not only does performance and scalability suffer, optimization becomes limited to abstract rules that don't address the real problems. Bob and others will deny that that ever happens in a "relational" database, but it's obvious as soon as you install and use a SQL database. It would be interesting to experiment with a "third manifesto" database, but so far no one's been able to implement one. |
|
Objectivity's OID strikes a great balance. It's fast enough so that it seems like you're working with a physical pointer, but the layers of indirection avoid the problems of hierarchical and network databases. It's not magic; it's just using some of the same concepts that have worked very well in other applications. The OID is in some ways very similar to an IP address and also similar to handles (e.g. Java references) in software memory management. Paul DeWolf Systems Engineer Objectivity |
|
"Corey Brown" <corey (AT) spectrumsoftware (DOT) net> wrote in message news:ZxkDb.2$re6.1 (AT) bignews5 (DOT) bellsouth.net... "Bob Badour" <bbadour (AT) golden (DOT) net> wrote in message news:6Lydndcs1cpKv0CiRVn-tA (AT) golden (DOT) net... In other words, OID is just a physical pointer. In Objectivity/DB an OID is a physical pointer. This provides for excellent performance at the expense of not being able to move the objects around in the repository freely. Other databases, like Versant, use logical OIDs, which allow the objects to be moved around more easily, but also are impacted by the expense of a redirect table lookup. --Corey |
#10
| |||
| |||
|
|
Versant's problem (in my opinion) is that there's a single centralized logical to physical indirection, which leads to performance and scalability limitations. |
![]() |
| Thread Tools | |
| Display Modes | |
| |