Abstract:
A method of providing reservation status relating to a group of objects includes providing a database for containing (i) availability data describing availability of at least one of the group of objects, and (ii) reservation data describing allocation of at least one of the group of objects. The availability data and the reservation data are stored in sparse form. The method further includes extracting, from the database, availability data and reservation data corresponding to a predetermined period of time, and combining the extracted availability data and reservation data to form windowed data in a dense format. The method also includes receiving the windowed data and providing the windowed data in a bit-vector view, and sampling the windowed data in the bit-vector view to produce sampled data. The sampled data provides the reservation status as a static view of the windowed data in the bit-vector view.

Description:
[0001]    This application is a continuation of U.S. patent application Ser. No. 12/028,477, filed Feb. 8, 2008, which claims benefit of and priority to U.S. Provisional Application No. 60/904,311, filed Mar. 1, 2007, and is entitled to those filing dates for priority. The specifications, figures, and complete disclosures of U.S. Provisional Application No. 60/904,311 and U.S. patent application Ser. No. 12/028,477 are incorporated herein in their entireties by specific reference for all purposes. 
     
    
     FIELD OF INVENTION 
       [0002]    The present invention relates to fleet management systems, and more particularly, to techniques for quickly and efficiently accessing and analyzing database information related to managing a fleet of reservable assets. 
       BACKGROUND OF THE INVENTION 
       [0003]    A fleet asset management system, such as a vehicle reservation system, typically stores information related to the assets themselves, along with the demands on those assets, within a database. Such information may include asset availability as a function of time, periods of time for which particular assets are to be used (i.e., reserved), and periods of time for which particular assets are free. 
         [0004]    A significant number of fleet assets and a significant number of demands on each of those assets can add up to a large amount of information in the database. In order to keep the size of the database relatively small, the information can be stored in the database in a “sparse” format, i.e., in a format that records only the temporal boundaries where data changes. 
         [0005]    However, when the information is stored in a sparse format, the information is not particularly easy to understand and interpret. Evaluations of this sparse data can get expensive in terms of processing power required to access the database and process the accessed information. 
       SUMMARY OF INVENTION 
       [0006]    In various embodiments, the invention comprises an apparatus for providing reservation status relating to a group of objects. The apparatus includes a database constructed and arranged to contain (i) availability data describing operational status of at least one of the group of objects, and (ii) reservation data describing allocation of at least one of the group of objects. The availability data and the reservation data are stored in sparse form. The apparatus further includes a windowing module for extracting, from the database, availability data and reservation data corresponding to a predetermined period of time, and combining the extracted availability data and reservation data to form windowed data in a dense format. The apparatus also includes a bit-vector module for receiving the windowed data and for providing the windowed data in a bit-vector view, and a copying module for sampling the windowed data in the bit-vector view to produce sampled data. The sampled data provides the reservation status as a static view of the windowed data in the bit-vector view. 
         [0007]    In one embodiment, the group of objects includes a fleet of automobiles. In another embodiment, the fleet of automobiles is geographically distributed over a predetermined area. 
         [0008]    In another embodiment, the availability data includes binary information specifying, for each of the at least one of the group of objects, that either (i) the object is functionally capable of performing a task, or (ii) the object is not functionally capable of performing the task. Another embodiment further includes a receiver module for receiving current availability data from at least one of the group of objects, and for updating the database with the current availability data. 
         [0009]    In one embodiment, the sampled data is provided to at least one of (i) a telephone interface, (ii) a network interface, or (iii) a customer service interface. Another embodiment further an application server for receiving a copy of the sampled data. The state between the copy of the sampled data and the data contained in the database is maintained at or near real time. 
         [0010]    In another embodiment, the copying module provides a copy of the sampled data to each of two or more application servers running application server software. In one embodiment, the application server software maintains consistency between the copies of the sampled data on the two or more application servers using a distributed invalidation function to inform the two or more application servers of impending changes to the copies of the sampled data. In another embodiment, the application server software maintains consistency between the copies of the sampled data on the two or more application servers by polling a journal table that records changes to the windowed data, and using the recorded changes to update the copy of the sampled data. 
         [0011]    Another aspect includes a method of providing reservation status relating to a group of objects. The method includes providing a database for containing (i) availability data describing availability of at least one of the group of objects, and (ii) reservation data describing allocation of at least one of the group of objects. The availability data and the reservation data are stored in sparse form. The method further includes extracting, from the database, availability data and reservation data corresponding to a predetermined period of time, and combining the extracted availability data and reservation data to form windowed data in a dense format. The method further includes receiving the windowed data and providing the windowed data in a bit-vector view, and sampling the windowed data in the bit-vector view to produce sampled data. The sampled data provides the reservation status as a static view of the windowed data in the bit-vector view. 
         [0012]    In one embodiment, the method further includes receiving current availability data from at least one of the group of objects, and updating the database with the current availability data. In another embodiment, the method further includes providing the sampled data to at least one of (i) a telephone interface, (ii) a network interface, or (iii) a customer service interface. 
         [0013]    One embodiment further includes an application server for receiving the sampled data, wherein the copying module maintains the state between the sampled data and the application server at or near real time. Another embodiment further includes providing a copy of the sampled data to each of two or more application servers running application server software. Yet another embodiment further includes maintaining consistency between the copies of the sampled data on the two or more application servers using a distributed invalidation function to inform the two or more application servers of impending changes to the copies of the sampled data. 
         [0014]    One embodiment further includes maintaining consistency between the copies of the sampled data on the two or more application servers by polling a journal table that records changes to the windowed data, and using the recorded changes to update the copy of the sampled data. 
         [0015]    Another aspect includes an apparatus for providing reservation status relating to a fleet of automobiles. The apparatus includes a database for containing (i) availability data describing operational status of at least one of the fleet of automobiles, and (ii) reservation data describing allocation of at least one of the fleet of automobiles. The availability data and the reservation data are stored in sparse form. The apparatus also includes a receiver module for receiving current availability data from at least one of the fleet of automobiles, and for updating the database with the current availability data. The apparatus also includes a windowing module for extracting, from the database, availability data and reservation data corresponding to a predetermined period of time, and combining the extracted availability data and reservation data to form windowed data in a dense format. The apparatus further includes a bit-vector module for receiving the windowed data and for providing the windowed data in a bit-vector view, and a copying module for sampling the windowed data in the bit-vector view to produce sampled data, wherein the sampled data provides the reservation status as a static view of the windowed data in the bit-vector view. 
         [0016]    Another aspect includes a system for providing reservation status relating to a fleet of automobiles. The system includes one or more automobiles, each having diagnostic equipment for providing availability data describing operational status associated with the automobile, and communication equipment for transmitting the availability data. The system also includes a reservation database platform, including database software. The database software is operative to provide a database constructed and arranged to contain the availability data of at least one of the fleet of automobiles, and reservation data describing allocation of at least one of the fleet of automobiles, wherein the availability data and the reservation data are stored in sparse form. The database software is also operative to provide a windowing module for extracting, from the database, availability data and reservation data corresponding to a predetermined period of time, and combining the extracted availability data and reservation data to form windowed data in a dense format. The database software is also operative to provide a bit-vector module for receiving the windowed data and for providing the windowed data in a bit-vector view. The database software is further operative to provide a copying module for sampling the windowed data in the bit-vector view to produce sampled data, wherein the sampled data provides the reservation status as a static view of the windowed data in the bit-vector view. The reservation database platform includes a receiver module for receiving current availability data from at least one of the fleet of automobiles, and for updating the database with the current availability data. The system further includes at least one application server for receiving a copy of the sampled data. 
         [0017]    In one embodiment, application server software running on the at least one application server monitors the reservation database platform for a change in the sampled data, and updates the copy of the sampled data when the change in the sampled data is detected. 
         [0018]    In another embodiment, the application database software maintains consistency between (i) the availability data and reservation data in the database, and (ii) the sampled data, by propagating changes in the availability data and the reservation data through the windowing module, the bit-vector module and the copying module. 
     
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         [0019]    The foregoing and other objects of this invention, the various features thereof, as well as the invention itself, may be more fully understood from the following description, when read together with the accompanying drawings in which: 
           [0020]      FIG. 1  shows a sectional view of one embodiment of a fleet management cache system using multiple tiers; 
           [0021]      FIG. 2  illustrates an example of a reservation system, constructed and arranged according the described embodiments. 
       
    
    
     DETAILED DESCRIPTION OF EXEMPLARY EMBODIMENTS 
       [0022]    The embodiments described herein include an apparatus, method and/or system that uses a multi-tiered cache coupled to a database to provide a user with filtered reservation results with respect to a group of objects geographically disbursed across a predetermined area. The predetermined area may include, for example, an office or college campus, a community, a city or a region. 
         [0023]    The described embodiments provide for allocation of scarce fleet resources to a large pool of users. One embodiment is directed to making reservations in an automobile-sharing service, but alternative embodiments can be used for other asset management applications, such as reservations for other shared resource applications, including fleet management, ride-sharing, living accommodations (e.g., hotel/motel, vacation properties), tool rentals, library books, video games and movies, and sports and outdoor equipment (e.g., bicycles, canoes, camping gear), among others. 
         [0024]    In several of the embodiments described herein, the objects to be reserved are vehicles, for example, automobiles, distributed throughout a city. These vehicles are available for use by pre-authorized people (i.e., users) that require temporary transportation. However, these embodiments are exemplary only, and other embodiments may be directed to other types of objects that can be geographically distributed, and reserved for temporary use by a group of users. Other applications of the concepts described herein may include but are not limited to corporate fleet management, ride sharing as applied to a fleet of vehicles, and commercial fleet management. 
         [0025]    Primary information about the objects (the vehicles in this embodiment) is stored in a database, along with information about users&#39; reservations on those objects. Primary data about the objects may include, but is not limited to, (i) vehicle type, (ii) current usability (i.e., whether the vehicle is functioning properly capable of being used), (iii) reported problems associated with the vehicle, (iv) location of the vehicle, among others. This data is stored in a sparse format in the database as described herein. 
         [0026]      FIG. 1  shows a sectional view of one embodiment of a fleet management cache system using multiple tiers. In general, this embodiment includes three caching levels above the database  102 , although other embodiments may include more or fewer tiers. The database  102  includes two components: (1) vehicle availability data  104  and (2) member reservation data  106 . 
         [0027]    The vehicle availability data  104  include information regarding the operational status of each of the vehicles, i.e., whether it is capable of being used. The availability data  104  may include, but is not limited to, information such as whether the vehicle passes certain diagnostic tests regarding its functionality (i.e., the engine is operational, the tires are inflated, the battery is charged, etc.), whether the vehicle is sufficiently fueled, and whether a previous driver has reported safety problems. In some embodiments, the availability data  104  for a particular vehicle is represented by a binary value such as PASS or FAIL, i.e., the vehicle is functionally capable of performing a task (being driven), or the object is not functionally capable of performing the task. 
         [0028]    The member reservation data  106  includes information regarding whether the vehicle has already been allocated to another user for a particular time period. 
         [0029]    The first caching level is windowed data  108  that converts the sparse data stored in the database  102  to a dense view that is windowed in time. The windowed data  108  is updated, in real time or near real time, whenever the underlying data in the database  102  changes. The windowed data  108  represents the availability of an object to be reserved. In transforming the sparse format information stored in the database to the dense format of the windowed data  108 , the described embodiment combines or merges individual records in the database  102  into a complete set of data that is substantially easier to interpret and manipulate. 
         [0030]    The windowed data  108  is thus a combination of a time-based window of dense data representing the vehicle availability data  104  described above, and a dense data view of member reservations from the current time going forward. The format of these two components is similar or the same, so that the two views can be easily combined to form the overall windowed data  108  described above. 
         [0031]    In general, the size of the window is such that the window will include a significant number of the total existing reservations. The window moves as with respect to the current time, and the size of the window may increase or decrease depending upon the number of existing reservations. In a typical system, the window will account for tens of thousands of reservable objects and hundreds of thousands of members that can reserve the objects, although other window sizes may be used in the described embodiments. 
         [0032]    The second caching level is a bit-vector view  110  of the windowed data  108 . The bit-vector view  110  allows the windowed data  108  to be stored in a very compact manner, i.e., in bit vectors, thereby efficiently utilizing storage and computing assets for faster data access. The bit vector data implements a simple set data structure that is effective at exploiting bit-level parallelism in hardware to enable operations to be performed quickly. 
         [0033]    The third caching level is a copy  112  of the bit-vector view  110 . The database  102 , the windowed data  108  and the bit-vector data  110  are all components of the database software  114 . 
         [0034]    Application server software  116  resides on an application server, which together provide an interface to external to the described system. The bit-vector copy  112  is a component of the application server software  116  that is coupled to and communicates with the database software  114 . This copy located on the application server allows a user to evaluate the reservation data without having to access the database. The copy can be instantiated on a number of different application servers, so that many users can evaluate the reservation data separately without having to compete for the database assets. 
         [0035]    The third caching layer loads the bit vectors from the bit-vector view  110  into a computer&#39;s in-memory array (RAM), and maintains a consistent view of this bit-vector data whenever the underlying data in the database  102  changes. This third layer within the application server software  116  reduces the need to look at the data from the bit-vector view  110  when checking for object asset availability. These in-RAM caches can exist on any number of computers independent of the database. 
         [0036]    To maintain consistency across the bit-vector cache copies, embodiments may employ one of the two techniques described below, or a combination of these techniques. 
         [0037]    The first technique uses a distributed invalidation function at the application server level to inform other application servers (and thus the other bit-vector cache copies) of impending changes to the reservation and vehicle data. This technique utilizes the HTTP protocol with a special cache invalidation request format built on top. When one application server makes a reservation request or vehicle allocation change that would alter the bit-vector cache, it first invalidates its own bit-vector cache copy, and then instructs other application servers to do the same. The data is then re-cached by a dedicated application server process once instructed to do so by the database. 
         [0038]    The second technique utilizes a database journal table to record changes to the windowed data (which is already updated in real time when changes to the underlying sparse data occur). The application server process responsible for generating the bit-vector cache copies then polls this table for changes, updates all cache copies across application servers, and continues. 
         [0039]    The first technique prevents stale cache data from being used at the application server level; the second technique prevents stale cache data, as a result of direct database changes, from persisting. Due to the nature of the application, a small time window when stale data persists is acceptable; however by utilizing a combination of these two techniques that window is significantly reduced or completely eliminated. 
         [0040]    Cache state between the application server and the database is maintained at or near real time. The database software  114  forces changes in the database  102  up the cache stack, and the application server software  116  polls for changes down the cache stack. Together, these actions create a very small window for which the cache layers between the database and the application server will be different. 
         [0041]    The copy  112  of the bit-vector view may be accessed by one or more of a number of different interfaces to the application server software  116 , as shown in  FIG. 1 . In one embodiment a user may access the copy  112  through a telephone interface  120 , through for example an interactive voice response (IVR) system. In another embodiment a user may access the copy  112  through a member network interface  122 , such as a web browser communicating through the Internet. In yet another embodiment, the copy  112  of the bit-vector view may be accessed via internal administrative tools through the customer service interface  124 . Such administrative tools may be used, for example, by an agent of the fleet service processing a reservation on behalf of a customer. 
         [0042]    In some embodiments, the database  102  receives primary information regarding the objects to be reserved directly from the objects themselves. In these embodiments, the objects, for example vehicles, include diagnostic and communication equipment for gathering and transmitting information to the fleet management caches system through any of several media types known in the art. For example, the vehicles may transmit the object information via cellular data networks to Internet access points, then through the Internet to the database  102 . The system in which the database  102  resides includes a receiver for receiving the object information, formatting the information into a form suitable for the database  102 , and entering the information into the database  102 . 
         [0043]      FIG. 2  illustrates an example of a reservation system  200 , constructed and arranged according the described embodiments. The system  200  includes a fleet of automobiles  202   a ,  202   b ,  202   c ,  202   d  and  202   e  geographically distributed over an area  203 , a reservation database platform  204 , and application servers  206   a ,  206   b  and  206   c . Other embodiments may include different numbers of automobiles  202  and application servers  206 . 
         [0044]    The reservation database platform  204  may include any processing system capable of executing the database software as described herein. The database platform  204  thus may include a server, a stand-alone computer, a workstation, or other such computing devices known in the art. 
         [0045]    The reservation database platform  204  includes a database  208  containing availability data  210  and reservation data  212 , a windowing module  214 , a bit-vector module  216 , a copying module  218  and a receiver module  220 . The database platform also includes other components typical to such platforms, such as memory devices (e.g., hard drives, FLASH memory, etc.) for storing the database software program code and other program code (e.g., operating system), power supplies, interface devices, displays, among other components. 
         [0046]    Each of the application servers  206  receives a static copy of the sampled windowed data in bit-vector view from the copying module  218 . In this embodiment, the communication links  222   a ,  222   b  and  222   c  between the reservation database platform  204  and the respective application servers  206  is an Internet connection, although other embodiments may utilize other communication techniques known in the art such as a wireless (e.g., cellular telephone network) link, a dedicated, hard-wired link (e.g., communications utilizing coaxial cable or fiber optics) or a public switched telephone network. 
         [0047]    Each of the automobiles  202  includes equipment necessary to ascertain the functionality and/or usability of the automobile, and to transmit this information to the receive module  220  of the reservation database platform  204 . The communication links  224   a ,  224   b ,  224   c ,  224   d  and  224   e  between the automobiles  202  and the receiver module  220  are shown as directed dotted lines in  FIG. 2 , although it is understood that these links (as described herein) may include various relay links (e.g., through one or more access points and network hops), and may not be direct links to the receiver module  220 . Further, although the links  224  are shown as unidirectional, in some embodiments the links  224  are bidirectional, allowing the reservation database platform to return information to the automobiles  202 . 
         [0048]    The invention may be embodied in other specific forms without departing from the spirit or essential characteristics thereof. The present embodiments are therefore to be considered in respects as illustrative and not restrictive, the scope of the invention being indicated by the appended claims rather than by the foregoing description, and all changes which come within the meaning and range of the equivalency of the claims are therefore intended to be embraced therein. Thus, it should be understood that the embodiments and examples described herein have been chosen and described in order to best illustrate the principles of the invention and its practical applications to thereby enable one of ordinary skill in the art to best utilize the invention in various embodiments and with various modifications as are suited for particular uses contemplated. Even though specific embodiments of this invention have been described, they are not to be taken as exhaustive. There are several variations that will be apparent to those skilled in the art.