Corresponding reference characters indicate corresponding parts throughout the drawings.
The server 102 typically has at least some form of computer readable media. Computer readable media, which include both volatile and nonvolatile media, removable and non-removable media, may be any available medium that may be accessed by server 102. By way of example and not limitation, computer readable media comprise computer storage media and communication media. Computer storage media include volatile and nonvolatile, removable and non-removable media implemented in any method or technology for storage of information such as computer readable instructions, data structures, program modules or other data. For example, computer storage media include RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disks (DVD) or other optical disk storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium that may be used to store the desired information and that may be accessed by server 102.
Communication media typically embody computer readable instructions, data structures, program modules, or other data in a modulated data signal such as a carrier wave or other transport mechanism and include any information delivery media. Those skilled in the art are familiar with the modulated data signal, which has one or more of its characteristics set or changed in such a manner as to encode information in the signal. Wired media, such as a wired network or direct-wired connection, and wireless media, such as acoustic, RF, infrared, and other wireless media, are examples of communication media. Combinations of any of the above are also included within the scope of computer readable media.
In one embodiment, a user accesses the electronic messaging application 104 through a messaging client application 106 executed on a client computer 108. The server 102 may operate in a networked environment using logical connections to one or more remote computers, such as a remote computer 108. The remote computer 108 may be a personal computer, a server, a router, a network PC, a peer device, a handheld device, a personal digital assistant (PDA) or other common network node, and typically includes many or all of the elements described above relative to server 102. The logical connections depicted in
The electronic messaging application 104 has access to a storage device 110 containing a messaging database 112 and one or more indexes 114 associated with the messaging database 112. In another embodiment, a cluster of servers provide a single database image or a single database virtualization of the messaging database 112. The server 102 may also include other removable/non-removable, volatile/nonvolatile computer storage media. For example,
The messaging database 112 contains messages and data associated with the electronic messaging application 104. Additionally, the electronic messaging application 104 has access to an index update component 116 and an index request component 124. The drives or other mass storage devices and their associated computer storage media discussed above and illustrated in
The user accesses the messaging data through queries that reference an index 114 of the messaging database 112 via the email client application 106. In one embodiment, queries include one or more of the following: a database query, a database search, a database interrogation, a searched update and other database accesses. The searched update is a request to update the database based on a search. For example, for the searched update “delete any messages Sam has received from Bob”, the database is searched for messages from Bob received by Sam and the messages identified by the search are deleted.
When the query is received by the electronic messaging application 104 on the server 102, the index update component 116 determines if the referenced index 114 is current. If the index 114 is current, the query is submitted to the messaging database 112 and control is returned to the electronic messaging application 104. In another embodiment, the query is modified so that the index 114 is utilized when the query is submitted to the messaging database 112. Thus, in this embodiment, the query is modified to force use of the index 114. Advantageously, the system is database vender neutral because the index 114 is created by using the messaging database 112, but the index 114 is independent of the messaging database 112.
If the index 114 is not current, the index update component 116 updates the index 114 before submitting the query to the messaging database 112. Advantageously, the index update component 116, updates the indexes 114 at the time they are referenced and not at the time the messaging database 112 is modified. Since this is the time the data is accessed, the index access path I/O is less random. Additionally, if an index is referenced infrequently or never referenced, system performance is not impacted because the index 114 is updated when referenced and not as modifications are applied to the messaging database 112. In another embodiment, the index update component 116 opportunistically and asynchronously updates the index 114 at times when it is not referenced. Advantageously, by executing the index update component 116 during periods of low database activity, the amount of maintenance necessary to update the index 114 at reference time is minimized using otherwise wasted system capacity. One skilled in the art recognizes that other characteristics can be used to determine when the index update component 116 should execute. The period of low database activity may be a declarative time (e.g. between 3 a.m. and 4 a.m.) or determined by current state of the system. For example, the index update component 116 executes if the storage media is currently operating at less than 50% of rated capacity, the processing units are currently operating at less than 30% of rated capacity, and there is more than 1 MB of free memory. These parameters are all observable by interrogating the state of the system.
The index update component 116 determines if the index 114 is current by comparing the state of the messaging database 112 to the state of the index 114. If the states are the same, then the index 114 is current. In one embodiment, a change number associated with the messaging database 112 and a change number associated with the index 114 are compared to determine if the index 114 is current. The change number is a unique increasing sequential number used to track transactions or database modifications 118 applied to the messaging database 112.
Database modifications 118 include additions, deletions, and changes to the messaging database 112. The database modifications 118 to the messaging database 112 are tracked and assigned a strictly increasing number to each modification (e.g. the change number). One skilled in the art will recognize there are many ways of tracking such changes, for example in one embodiment this change tracking mechanism is a physical database recovery log and in another embodiment it may be a logical events or actions table. Additionally, the database modifications 118 are arranged so that they can be efficiently retrieved in change order and in a format that records the insertion, deletion, and modification of data in the messaging database 112. In one embodiment, the database modifications 118 are formatted so they may be filtered based on a subset of the data in the messaging database 112. The subset of data is indicated by any metadata that identifies a subset of data indexed. For example, in one embodiment of the electronic messaging application 104 the metadata includes a mailbox identifier and a folder identifier within the mailbox. For other applications in other embodiments, the metadata includes a table name and an index key range within the table.
In one embodiment, an index deletion component 122 deletes indexes 114 that are not being utilized. In this embodiment, a last referenced date is associated with the index 114. The last referenced date is updated when a query referencing the index 114 is submitted to the messaging database 112. The index deletion component 122 deletes any index 114 that has not been referenced within a certain period of time. For example, suppose the messaging database 112 includes two indexes 114, I1 last referenced on Jan. 1, 2006 and I2 last referenced on Mar. 1, 2006. If the index deletion component 122 is configured to delete indexes 114 that have not been referenced in 60 days and the current data is Apr. 1, 2006, the index deletion component 122 will delete I1 and not I2. Furthermore, because the index deletion component 122 is independent of the electronic messaging application 104 and index update component 122, the index deletion component 122 can be scheduled to execute during periods of low database activity. By deleting indexes 114 that are not being utilized, system resources (e.g. disk space) are freed for other purposes. One skilled in the art recognizes that other characteristics can be used to determine when the index deletion component 122 should execute. The period of low database activity may be a declarative time (e.g. between 3 a.m. and 4 a.m.) or determined by current state of the system. For example, the index deletion component 122 executes if the storage media is currently operating at less than 50% of rated capacity, the processing units are currently operating at less than 30% of rated capacity, and there is more than 1 MB of free memory. These parameters are all observable by interrogating the state of the system.
According to another aspect of the invention, if the index 114 does not exist for the query, the index request component 124 generates an unsatisfied request record 126 to track indexes 114 that would have been utilized had they existed. An index creation component 128 creates new indexes from the unsatisfied request records 126. This allows the system to track access patterns at run-time to determine what indexes 114 are needed but do not exist. Additionally, the index creation component 128 is independent of the database query and thus, it can be executed during periods of low database activity. Advantageously, the penalty for creating an index 114 that is not utilized by a query is minimal because the index 114 will not effect system performance because it will not be updated and eventually the index 114 will deleted by the index deletion component 122. Also, no skilled human intervention is required to create the index 114. One skilled in the art recognizes that other characteristics can be used to determine when the index creation component 128 should execute. The period of low database activity may be a declarative time (e.g. between 3 a.m. and 4 a.m.) or determined by current state of the system. For example, the index creation component 128 executes if the storage media is currently operating at less than 50% of rated capacity, the processing units are currently operating at less than 30% of rated capacity, and there is more than 1 MB of free memory. These parameters are all observable by interrogating the state of the system.
Generally, the data processors of server 102 are programmed by means of instructions stored at different times in the various computer-readable storage media of the computer. Programs and operating systems are typically distributed, for example, on floppy disks or CD-ROMs. From there, they are installed or loaded into the secondary memory of a computer. At execution, they are loaded at least partially into the computer's primary electronic memory. Aspects of the invention described herein includes these and other various types of computer-readable storage media when such media contain instructions or programs for implementing the steps described below in conjunction with a microprocessor or other data processor. Further, aspects of the invention include the computer itself when programmed according to the methods and techniques described herein.
For purposes of illustration, programs and other executable program components are illustrated herein as discrete blocks. It is recognized, however, that such programs and components reside at various times in different storage components of the computer, and are executed by the data processor(s) of the computer.
At 204, a check is made to see if the index 114 exists. In one embodiment, metadata is created for each index 114 in the messaging database 112. The metadata is searched to determine if the index 114 referenced in the query exists. For notational convenience, Structured Query Language (SQL) Data Definition Language (DDL) is used to represent the following embodiment for schema for this metadata and other schema illustrated herein.
For example, to represent an index 114 on the message receive time and subject, the following SQL statements are executed to create two records in the IndexDefinition table:
Insert into indexDefinition values(1, 0, ptagMessageReceiveTime, true)
Insert into indexDefinition values (1, 1, ptagSubject, true)
Furthermore, one skilled in the art of databases recognizes that variations of the schema that record the same information could also be used for the metadata and other schema illustrated herein.
If the index 114 does not exist, the query is executed at 206 without the index 114. If the index 114 exists, in one embodiment, a check is made to determine if the index 114 contains the subset of data associated with the query at 208. In another embodiment, index control records 300 (as shown in
At 210, a check is made to determine if the index 114 is current for the data subset. In one embodiment, the index 114 is not current if the change number associated with the index 114 is less than the change number associated with the messaging database 112. If the index 114 is current, the query is executed with the index 114 at 212.
If the index 114 is not current, database modifications 118 are applied to the index 114 at 214. In one embodiment, a modification corresponding to the database modification 188 is applied to the index 114. Database modifications 118 to the messaging database 112 are tracked in a sequential manner. Examples of database modifications include a reliable eventing queue, a recovery log, a change history. In general, any mechanism that tracks changes in a sequential manner, assigns a strictly increasing number to each change, allows the data to be efficiently retrieved in change order, provides the data in a form capable of being filtered, and records insertion, deletion, and modification to the messaging database 112 may be utilized. The following is one embodiment of a reliable events table in SQL DDL notation:
The baseDataldentifier field identifies the base data being changed so it can be quickly retrieved. Examples include a primary key, a record identifier, a message identifier, or any other unique way to identify the data being affected. After the database modifications 118 have been applied to the index 114, the query is executed with the index 114 at 212.
An index identifier 302 identifies the index 114 of the messaging database 112. In one embodiment, the index identifier (indexNum) in the index definition table described above corresponds to an index 114 of the messaging database 112.
The index change number 304 (lastUpdateCN) indicates the change number associated with the index 114. The index change number 304 indicates the last database modification 118 applied to the index 114 and is used to determine if the index 114 is current by comparing the index change number 304 to a change number associated with the messaging database 112. The index change number 304 is a sequential increasing number. If the change number associated with the messaging database 112 is greater than the index change number 304, the index 114 is not current. Examples of change numbers include: Messaging Application Programming Interface (MAPI) change number, log sequence number (LSN), or log relative byte offset (LRBA).
In one embodiment, the index control record 300 includes a dataset identifier 306 (dataSubset). The dataset identifier 306 is used to identify the subset of messaging database 112 data in the index 114. Any metadata to identify the subset of data indexed may be used including: a mailbox identifier and folder identifier within that mailbox; a table name and an index key range within a table; a property of the data; a comparison value and comparator; and an expression containing properties of the data, comparison values and comparators. For example, all the mail from Bob is a subset of data identified as all the messages containing a property ‘from’ where the value of the ‘from’ property is equal to ‘Bob’. In another example, all the mail received between 1 p.m. and 2 p.m. yesterday containing the word ‘hippo’ in the subject property, routed through china, where the message was not encrypted is a subset of data identified as all messages where the receive time property is greater than 1 p.m. and less than 2 p.m., there exists a substring within the subject property matching ‘hippo’, where the ‘route taken’ property includes china, and the encrypted property is not true. Identifying a subset of messaging database 112 data allows for enhanced performance because when the index 114 is referenced, the query will be for a subset of the data and the index update component 116 will update the index 114 for the specified subset instead of the entire index 114.
In another embodiment, the index control record 300 includes a last referenced time 308 (lastReferenceTime). The last referenced time 308 indicates the last time the index 114 was referenced in the query. In one embodiment, the index deletion component 122 accesses each index control record 300 and compares the last referenced time 308 to the current date and time. If the last referenced time 308 indicates that the index 114 has not been used for a period of time, the index 114 is deleted. In the embodiment where the data subset identifier is used, the data in the index 114 for the subset set of messaging database 112 data is deleted. The index 114 itself will be deleted if no other subset of data is within the index 114.
At 406, a check is made to determine if the index 114 exists. In one embodiment, metadata is created for each index 114 in the messaging database 112. The metadata is searched to determine if the formulated index exists for the messaging database 112. In this embodiment, the metadata is stored in the index definition table described above.
If the formulated index exists, the query is executed at 408 with the index 114. However, if the formulated index does not exist, the formulated index is saved as an unsatisfied request record 126 at 410 so it can be tracked by the index creation component 128. The unsatisfied request record 126 includes the date and time the query would have utilized had it existed and an index definition used to define the index. In one embodiment, the unsatisfied request record 126 includes a data subset identifier as described above. In this embodiment, a check is made to determine if the formulated index exists for a subset of data associated with the request. If the formulated query exists, the query is executed with the index 114 at 408. However, if the formulated index does not exist, an unsatisfied request record 126 is generated for the index 114 for the subset of the data at 410.
At 412, the query is executed without the index 114. At 414, the index 114 is created as a function of the saved unsatisfied request record 126. In one embodiment, the index 114 is created during a period of low database activity. In another embodiment, the index 114 is created when a threshold of unsatisfied request records is met. For example, the index 114 may be created if two or more unsatisfied request records 126 exist for the index 114. It should be apparent to one of average skill in the art that that are a multitude of other heuristics for selecting an optimal time to create the index 114.
A Request Time field 502 (requestTime) identifies the date and time that the index would have been utilized by a query if it had existed. The Request Time field 502 allows the system to track multiple requests for the same index. It also allows the system to calculate the frequency of the request for a particular index. Both of these characteristics can be used to determine when a new index 114 should be created or the priority for creating indexes 114. For example, suppose the index creation component 128 is scheduled to execute during a three hour period of low database activity. Also, assume that the index creation component 128 is to stop after the three hour period even if all indexes 114 for the unsatisfied requests 500 have not been created. The index creation component 128 accesses the unsatisfied requests 500 and determines which index has been requested the most, and creates that index 114 first. Also, if two or more indexes have been requested the same number of times, the index creation component 128 can determine the request time 503 to determine which index was requested last and create that index first.
The Index Definition field 504 (keyOrder, property, sortAscending) contains values that allow the index creation component 128 to create the index 114 for the messaging database 112. In one embodiment, the index control record 500 includes a dataset identifier 506 (dataSubset). As described above, the dataset identifier 506 is used to identify the subset of messaging database 112 data in the index 114. When the index creation component 128 creates the index, it will populate the index 114 with data indicated by the dataset identifier 506. Further, if the index 114 already exists, the index creation component 128 will populate the index 114 with the subset of data indicated by the dataset identifier 506.
In operation, server 102 executes computer-executable instructions such as those illustrated in the figures to implement aspects of the invention.
The order of execution or performance of the operations in embodiments of the invention illustrated and described herein is not essential, unless otherwise specified. That is, the operations may be performed in any order, unless otherwise specified, and embodiments of the invention may include additional or fewer operations than those disclosed herein. For example, it is contemplated that executing or performing a particular operation before, contemporaneously with, or after another operation is within the scope of aspects of the invention.
Embodiments of the invention may be implemented with computer-executable instructions. The computer-executable instructions may be organized into one or more computer-executable components or modules. Aspects of the invention may be implemented with any number and organization of such components or modules. For example, aspects of the invention are not limited to the specific computer-executable instructions or the specific components or modules illustrated in the figures and described herein. Other embodiments of the invention may include different computer-executable instructions or components having more or less functionality than illustrated and described herein.
When introducing elements of aspects of the invention or the embodiments thereof, the articles “a,” “an,” “the,” and “said” are intended to mean that there are one or more of the elements. The terms “comprising,” “including,” “including,” and “having” are intended to be inclusive and mean that there may be additional elements other than the listed elements.
Having described aspects of the invention in detail, it will be apparent that modificaitons and variations are possible without departing from the scope of aspects of the invention as defined in the appended claims. As various changes could be made in the above constructions, products, and methods without departing from the scope of aspects of the invention, it is intended that all matter contained in the above description and shown in the accompanying drawings shall be interpreted as illustrative and not in a limiting sense.