Proximity search methods using tiles to represent geographical zones
A proximity search engine for carrying out a proximity search with respect to a reference location uses as a reference frame the earth divided into tiles, which are predefined geographic regions of substantially equal areas. Records that are searched based on proximity to a reference location include location pointers, each of which identifies a particular tile that encompasses the physical location indicated by the corresponding record. When the proximity search is carried out, the tiles that are within a specified distance from the reference location are obtained and records having location pointers corresponding to such tiles are selected for inclusion in the search results.
Latest Facebook Patents:
- Methods and devices for haptic communication
- Identifying content to present to a group of online system users based on user actions and specified by a third-party system
- SURFACE RELIEF GRATING AND METHOD OF MAKING THE SAME
- VOLUME BRAGG GRATING, FABRICATION METHOD AND SYSTEM
- INTRALINK BASED SESSION NEGOTIATION AND MEDIA BIT RATE ADAPTATION
1. Field of the Invention
The present invention generally relates to proximity search techniques, and more specifically, to a method and a system for performing searches based on proximity to a reference location.
2. Description of the Related Art
A geographic location may be represented as latitude and longitude.
There are many ways of obtaining the latitude and longitude for a particular geographic location. Latitude and longitude positions for locations specified using zip codes, postal codes and cities may be obtained from third party databases using a simple table look-up. Also, a handheld electronic device, such as a pocket PC, cell phone or a personal digital assistant (PDA), may have a GPS receiver and associated software for determining the latitude and longitude position of the handheld electronic device.
In the current art, a proximity search of database records with respect to a reference location is carried out by calculating the distances between the reference location and the locations associated with each of the database records. First, the latitude and longitude positions of the reference location are obtained. Second, the latitude and longitude positions of the locations associated with the database records are obtained. Third, the distances between the reference location and the locations associated with the database records are calculated. Fourth, the database records associated with locations that are within a certain distance (as specified in the proximity search request) from the reference location are selected to be included in the search results.
When the number of database records is large, the proximity search method carried out in the above manner becomes computationally very expensive because of the large number of distance calculations that are required. Distance calculations that are based on zip codes and postal codes have been used to reduce the computational cost, but are not very accurate, and only work for locations in countries having postal codes that are mapped to latitude-longitude values. Quad trees and R-Trees that rely on a two-dimensional grid of regions and subregions have been used to describe the locations of objects in a two-dimensional space, but they require binary-like searches to zero in on the appropriate regions. For proximity searching, they are either too inaccurate (e.g., when the region size is large) or computationally too expensive (e.g., when the region size is sufficiently small).
SUMMARY OF THE INVENTIONThe invention provides an improved proximity search technique that is either faster or more accurate than the ones employed in the current art. According to the invention, the earth is divided into predefined geographic regions of substantially equal areas, referred to as tiles, and records that are searched based on proximity to a reference location include location pointers, each of which identifies a particular tile that encompasses the physical location indicated by the corresponding record. When the proximity search is carried out, the tiles that are within a specified distance from the reference location are obtained and records having location pointers corresponding to such tiles are selected for inclusion in the search results.
The reference location may be specified in the proximity search as a zip code, city-state, or city-country, or the location of the user requesting the proximity search may be retrieved from a database as the reference location. If the user requesting the proximity search is carrying a handheld electronic device that includes a GPS receiver and associated software, the reference location may also be specified as the current location of the user as determined by the GPS receiver and associated software.
After the reference location is determined, the latitude and longitude of the reference location are obtained and the tile that includes the latitude and longitude of the reference location is identified. The searched records that have location pointers that point to those tiles that are within the specified distance from the reference location tile are then selected for inclusion in the search results.
Proximity searches carried out in the above manner no longer require individual distance calculations between the reference location and each database record being searched. As a result, the total number of distance calculations is reduced with the invention and the speed of the executed searches is increased. The invention also provides flexibility in designing proximity searches, e.g., the accuracy of proximity searches can be increased by decreasing the tile size and the speed of the proximity searches can be increased by increasing the tile size.
So that the manner in which the above recited features of the present invention can be understood in detail, a more particular description of the invention, briefly summarized above, may be had by reference to embodiments, some of which are illustrated in the appended drawings. It is to be noted, however, that the appended drawings illustrate only typical embodiments of this invention and are therefore not to be considered limiting of its scope, for the invention may admit to other equally effective embodiments.
Each geographic location in
LatQ=Int((latitude+90)*k/r+1); and
LongQ=Int((longitude+180)*k Cos (latitude/r+1),
where latitude and longitude values are expressed in degrees; k is a factor for converting a 1-degree arc measured with respect to earth's center into miles (k=2π*(earth's radius)/360°-69.0933 miles/degree); r is the length of each side of a tile (in the illustrated embodiment, r=3.4 miles); and LatQ and LongQ define the position of a tile in the coordinate system shown in
The LatQ value defines the position of the tile along the x-axis, beginning with LatQ=1, and the LongQ value defines the position of the tile along the y-axis, beginning with LongQ=1. The north pole in
The international date line maps onto a line that is shown in
The invention will now be described in the context of a social network. A social network is generally defined by the relationships among groups of individuals, and may include relationships ranging from casual acquaintances to close familial bonds. A social network may be represented using a graph structure. Each node of the graph corresponds to a member of the social network. Edges connecting two nodes represent a relationship between two individuals. In addition, the degree of separation between any two nodes is defined as the minimum number of hops required to traverse the graph from one node to the other. A degree of separation between two members is a measure of relatedness between the two members.
Degrees of separation in a social network are defined relative to an individual. For example, in ME's social network, H and ME are separated by 2 d/s, whereas in G's social network. H and G are separated by only 1 d/s. Accordingly, each individual will have their own set of first, second and third degree relationships.
As those skilled in the art understand, an individual's social network may be extended to include nodes to an Nth degree of separation. As the number of degrees increases beyond three, however, the number of nodes typically grows at an explosive rate and quickly begins to mirror the ALL set.
The member database 210 contains profile information for each of the members in the online social network managed by the system 100. The profile information may include, among other things: a unique member identifier, name, age, gender, location, hometown, references to image files, listing of interests, attributes, and the like. The location information may include: (i) address, city, state, zip code or postal code, and country; (ii) latitude and longitude values associated with the specified address, zip code, postal code, city-state or city-country; and (iii) a pointer to a tile that includes the location associated with the latitude and longitude values. The relationship database 220 stores information defining to the first degree relationships between members. The relationship database 220 stores information relating to the first degree relationships between members. In addition, the contents of the member database 210 are indexed and optimized for search, and stored in the search database 230. The member database 210, the relationship database 220, and the search database 230 are updated to reflect inputs of new member information and edits of existing member information that are made through the computers 500.
The application server 200 also manages the information exchange requests that it receives from the remote computers 500. The graph servers 300 receive a query from the application server 200, process the query and return the query results to the application server 200. Graph servers 300 store a graph representation of the social network defined by all of the members (nodes) and their corresponding relationships (edges). The graph servers 300 respond to requests from application server 200 to identify relationships and the degree of separation between members of the online social network.
The application server 200 is further configured to query a third party service 600 for latitude and longitude values corresponding to location information (e.g., address, zip code, postal code, city-state, city-country, etc.) that it sends as a part of the query. The third party service 600 looks up the latitude and longitude values corresponding to the location specified in the query from its database 610 and returns the latitude and longitude values to the application server 200. In an alternative embodiment, the database containing latitude and longitude values corresponding to locations specified in terms of address, zip code, postal code, city-state, and/or city-country, may be maintained as part of the computer system 100 and accessed internally by the application server 200.
In Step 603, the latitude and longitude values are used to calculate corresponding LatQ and LongQ values using the following formula:
LatQ=Int((latitude+90)*k/r+1); and
LongQ=Int((longitude+180)*k* Cos (latitude)/r+1).
where k is a factor for converting a 1-degree arc measured with respect to earth's center into miles (k=2π*(earth's radius)/360°=69.0933 miles/degree); r is the length of the sides of the tiles and is 3.4 miles; and latitude and longitude values are expressed in degrees. Accuracy in the proximity searches can be improved by reducing r, but at the expense of computational speed. Computation speed of the proximity searches can be increased by increasing r, but at the expense of accuracy.
In Step 604, the (LatQ, LongQ) pair is stored in the member database 210 as part of the new record and is used as a pointer to identify the particular tile that covers the location associated with the new record. To optimize for database indexing, the (LatQ, LongQ) pair may be packed into a single integer value.
The input parameter “Proximity” defines the distance value that is used in carrying out the proximity search. A distance value of 25 miles, as illustrated in
If the latitude and longitude values are passed as part of the search query, Step 903 is skipped and flow proceeds directly to Step 904. In Step 904, a set of (LatQ, LongQ) values that correspond to the longitude of the reference location and are within the specified distance from the reference location is obtained. In Step 905, for each (LatQ, LongQ) value in the set obtained in Step 904, all LongQ values that are within the specified distance directly to the west and directly to the east (i.e., to the west and to the east along the same latitude) are obtained. In Step 906, all (LatQ, LongQ) values obtained in Step 905 are compiled into an array as valid location pointers. In Step 907, if any records in the database have (LatQ, LongQ) values that are contained in the array of valid location pointers, these records are included in the search results.
The code that implements Steps 904-906 of
- Range=Round((Distance−(r/2.0))/r); //r=3.4 miles, as specified before;
- Distance represents the distance value that is specified in the search query;
While particular embodiments according to the invention have been illustrated and described above, those skilled in the art understand that the invention can take a variety of forms and embodiments within the scope of the appended claims.
Claims
1. A method carried out by a computer system of identifying records based on proximity to a reference location in response to a search query, comprising the steps of:
- by one or more computing devices, determining location data representative of the reference location; converting said location data into a reference location pointer that points to one of a plurality of predefined geographic regions, each of the predefined geographic regions having four sides of an equal surface distance and associated with a location pointer having a first index and a second index, the first index and the second index identifying a point on a coordinate system;
- by the one or more computing devices, identifying a set of location pointers whose corresponding predefined geographic regions are within a certain distance from the predefined geographic region corresponding to the reference location pointer using an integer number, N, which is obtained by dividing the certain distance by the equal surface distance, wherein each of the location pointers in the set has a first index that differs from the first index of the reference location pointer by no more than N and a second index that differs from a third index by no more than N, wherein the third index is a function of the first index of the reference location pointer and represents the same longitudinal position as the reference location pointer; and
- by the one or more computing devices, identifying records having location pointers that are in the set.
2. The method according to claim 1, wherein the search query specifies the certain distance.
3. The method according to claim 2, wherein the reference location is the location from which the search query is received.
4. The method according to claim 2, wherein the reference location is the location specified in a record corresponding to the user who submitted the search query.
5. The method according to claim 1, further comprising the step of maintaining a plurality of records in a database, each of the plurality of records including a location pointer to one of the plurality of predefined geographic regions.
6. The method according to claim 5, wherein the predefined geographic regions corresponding to the set of location pointers comprises a subset of the plurality of predefined geographic regions.
7. The method according to claim 1, wherein said location data comprises latitude and longitude values.
8. A record management system for performing searches based on proximity to a reference location, comprising:
- a memory device containing a plurality of searchable records, each searchable record including a location pointer that corresponds to one of a plurality of predefined geographic regions, each of the predefined geographic regions having four sides of an equal surface distance and associated with a location pointer having a first index and a second index, the first index and the second index identifying a point on a coordinate system; and
- a processor programmed to: (i) receive a search query including the reference location and a distance value; (ii) generate a reference location pointer having a first index and a second index for the reference location; (iii) divide the distance value by the equal surface distance to obtain an integer number, N; (iv) identify a set of location pointers having a first index that differs from the first index of the reference location pointer by no more than N and a second index that differs from a third index by no more than N, wherein the third index is a function of the first index of the reference location pointer and represents the same longitudinal position as the reference location pointer; and (v) return records having location pointers in the identified set.
9. The system according to claim 8, wherein the processor is further programmed to: (i) receive an input of a searchable record including location information associated with the searchable record; (ii) convert the location information into a location pointer that corresponds to one of the plurality of predefined geographic regions; and (iii) store the location pointer.
10. The system according to claim 9, wherein the location information comprises a zip code.
11. The system according to claim 9, wherein the location information includes city and country.
12. A method comprising:
- by one or more computing devices, receiving a query from a first user of a social-networking system, the social-networking system comprising a graph that comprises a plurality of nodes and edges connecting the nodes, at least one node in the graph corresponding to the first user, the query comprising one or more location data corresponding to a location of the first user;
- by the computing devices, identifying one or more second users of the social-networking system that are connected to the first user within the social-networking system, at least one node in the graph corresponding to each of the second users, at least one of the nodes corresponding to the first user and at least one of the nodes corresponding to a second user being connected to each other by one or more edges;
- by the computing devices, determining a location of each of one or more of the second users;
- by the computing devices, identifying one or more of the second users that are located within a threshold distance of the location of the first user, wherein identifying one or more of the second users that are located within a threshold distance of the location of the first users comprises: by the computing devices, converting location information associated with each of at least one of the nodes corresponding to the second users to a location pointer that points to one of a plurality of predefined geographic regions, each of the plurality of predefined geographic regions having four sides of an equal surface distance and is associated with a location pointer having a first index and a second index, the first index and the second index identifying a point on a coordinate system; by the computing devices, converting the one or more location data into a reference location pointer that points to one of the plurality of predefined geographic regions; and by the computing devices, identifying a set of location pointers whose corresponding predefined geographic regions are within the distance from the predefined geographic region corresponding to the reference location pointer using an integer number, N, which is obtained by dividing the distance by the equal surface distance, wherein each location pointer from the set of location pointers has a first index that differs from the first index of the reference location pointer by no more than N and a second index that differs from a third index by no more than N, wherein the third index is a function of the first index of the reference location pointer and represents the same longitudinal position as the reference location pointer; and by the computing devices, providing, as a response to the query, information associated with each of one or more of the second users that are located within the threshold distance of the location of the first user.
13. The method of claim 12, further comprising sending the response to the first user.
14. The method of claim 12, wherein the query comprises the threshold distance.
15. The method of claim 12, wherein:
- the query comprises one or more keywords;
- each of one or more nodes in the graph corresponding to each of one or more second users is associated with one or more keywords;
- the method further comprises, by the computing devices, identifying among the second users that are located within the threshold distance of the location of the first user one or more second users that correspond to nodes associated with keywords matching the keywords of the query; and
- information associated with a second user is provided as a response to the query only if the node corresponding to the second is associated with keywords matching the keywords in the query.
16. The method of claim 12, wherein:
- the query comprises a gender;
- each of one or more nodes in the graph corresponding to each of one or more second users indicates a gender of the second user;
- the method further comprises, by the computing devices, identifying among the second users that are located within the threshold distance of the location of the first user one or more second users that match the gender in the query; and
- information associated with a second user is provided as a response to the query only if the second user matches the gender in the query.
17. The method of claim 12, wherein:
- the query comprises a marital status;
- each of one or more nodes in the graph corresponding to each of one or more second users indicates a marital status of the second user;
- the method further comprises, by the computing devices, identifying among the second users that are located within the threshold distance of the location of the first user one or more second users that match the marital status in the query; and
- information associated with a second user is provided as a response to the query only if the second user matches the marital status in the query.
18. The method of claim 12 wherein identifying one or more of the second users that are located within a threshold distance of the location of the first users comprises:
- mapping location information associated with each of at least one of the nodes corresponding to the second users to one of a plurality of geographic regions; and
- mapping the location data to a first geographic region of the plurality of geographic regions.
19. A system comprising:
- a memory comprising instructions executable by one or more processors; and
- the processors coupled to the memory and operable to execute the instructions, the one or more processors being operable when executing the instructions to: receive a query from a first user of a social-networking system, the social-networking system comprising a graph that comprises a plurality of nodes and edges connecting the nodes, at least one node in the graph corresponding to the first user, the query comprising one or more location data corresponding to a location of the first user; identify one or more second users of the social-networking system that are connected to the first user within the social-networking system, at least one node in the graph corresponding to each of the second users, at least one of the nodes corresponding to the first user and at least one of the nodes corresponding to a second user being connected to each other by one or more edges; determine a location of each of one or more of the second users; identify one or more of the second users that are located within a threshold distance of the location of the first user, wherein to identify one or more of the second users that are located within a threshold distance of the location of the first users, the one or more processors are operable when executing the instructions to: convert location information associated with each of at least one of the nodes corresponding to the second users to a location pointer that points to one of a plurality of predefined geographic regions, each of the plurality of predefined geographic regions having four sides of an equal surface distance and is associated with a location pointer having a first index and a second index, the first index and the second index identifying a point on a coordinate system; convert the one or more location data into a reference location pointer that points to one of the plurality of predefined geographic regions; and identify a set of location pointers whose corresponding predefined geographic regions are within the distance from the predefined geographic region corresponding to the reference location pointer using an integer number, N, which is obtained by dividing the distance by the equal surface distance, wherein each location pointer from the set of location pointers has a first index that differs from the first index of the reference location pointer by no more than N and a second index that differs from a third index by no more than N, wherein the third index is a function of the first index of the reference location pointer and represents the same longitudinal position as the reference location pointer; and provide as a response to the query information associated with each of one or more of the second users that are located within the threshold distance of the location of the first user.
20. The system of claim 19, wherein the processors are further operable when executing the instructions to send the response to the first user.
21. The system of claim 19, wherein the query comprises the threshold distance.
22. The system of claim 19, wherein:
- the query comprises one or more keywords;
- each of one or more nodes in the graph corresponding to each of one or more second users is associated with one or more keywords;
- the processors are further operable when executing the instructions to identify among the second users that are located within the threshold distance of the location of the first user one or more second users that correspond to nodes associated with keywords matching the keywords of the query; and
- information associated with a second user is provided as a response to the query only if the node corresponding to the second is associated with keywords matching the keywords in the query.
23. The system of claim 19, wherein:
- the query comprises a gender;
- each of one or more nodes in the graph corresponding to each of one or more second users indicates a gender of the second user;
- the processors are further operable when executing the instructions to identify among the second users that are located within the threshold distance of the location of the first user one or more second users that match the gender in the query; and
- information associated with a second user is provided as a response to the query only if the second user matches the gender in the query.
24. The system of claim 19, wherein:
- the query comprises a marital status;
- each of one or more nodes in the graph corresponding to each of one or more second users indicates a marital status of the second user;
- the processors are further operable when executing the instructions to identify among the second users that are located within the threshold distance of the location of the first user one or more second users that match the marital status in the query; and
- information associated with a second user is provided as a response to the query only if the second user matches the marital status in the query.
25. The system of claim 19, wherein, to identify one or more of the second users that are located within a threshold distance of the location of the first users, the processors are operable when executing the instructions to:
- map location information associated with each of at least one of the nodes corresponding to the second users to one of a plurality of geographic regions; and
- map the location data to a first geographic region of the plurality of geographic regions.
26. One or more computer-readable non-transitory storage media embodying software operable when executed by one or more computer systems to:
- receive a query from a first user of a social-networking system, the social-networking system comprising a graph that comprises a plurality of nodes and edges connecting the nodes, at least one node in the graph corresponding to the first user, the query comprising one or more location data corresponding to a location of the first user;
- identify one or more second users of the social-networking system that are connected to the first user within the social-networking system, at least one node in the graph corresponding to each of the second users, at least one of the nodes corresponding to the first user and at least one of the nodes corresponding to a second user being connected to each other by one or more edges;
- determine a location of each of one or more of the second users;
- identify one or more of the second users that are located within a threshold distance of the location of the first user, wherein, to identify one or more of the second users that are located within a threshold distance of the location of the first users, the software is further operable when executed to: convert location information associated with each of at least one of the nodes corresponding to the second users to a location pointer that points to one of a plurality of predefined geographic regions, each of the plurality of predefined geographic regions having four sides of an equal surface distance and is associated with a location pointer having a first index and a second index, the first index and the second index identifying a point on a coordinate system; convert the one or more location data into a reference location pointer that points to one of the plurality of predefined geographic regions; and identify a set of location pointers whose corresponding predefined geographic regions are within the distance from the predefined geographic region corresponding to the reference location pointer using an integer number, N, which is obtained by dividing the distance by the equal surface distance, wherein each location pointer from the set of location pointers has a first index that differs from the first index of the reference location pointer by no more than N and a second index that differs from a third index by no more than N, wherein the third index is a function of the first index of the reference location pointer and represents the same longitudinal position as the reference location pointer; and
- provide as a response to the query information associated with each of one or more of the second users that are located within the threshold distance of the location of the first user.
27. The media of claim 26, wherein the software is further operable when executed to send the response to the first user.
28. The media of claim 26, wherein the query comprises the threshold distance.
29. The media of claim 26, wherein:
- each of one or more nodes in the graph corresponding to each of one or more second users is associated with one or more keywords;
- the software is further operable when executed to identify among the second users that are located within the threshold distance of the location of the first user one or more second users that correspond to nodes associated with keywords matching the keywords of the query; and
- information associated with a second user is provided as a response to the query only if the node corresponding to the second is associated with keywords matching the keywords in the query.
30. The media of claim 26, wherein:
- the query comprises a gender;
- each of one or more nodes in the graph corresponding to each of one or more second users indicates a gender of the second user;
- the software is further operable when executed to identify among the second users that are located within the threshold distance of the location of the first user one or more second users that match the gender in the query; and
- information associated with a second user is provided as a response to the query only if the second user matches the gender in the query.
31. The media of claim 26, wherein:
- the query comprises a marital status;
- each of one or more nodes in the graph corresponding to each of one or more second users indicates a marital status of the second user;
- the software is further operable when executed to identify among the second users that are located within the threshold distance of the location of the first user one or more second users that match the marital status in the query; and
- information associated with a second user is provided as a response to the query only if the second user matches the marital status in the query.
32. The media of claim 26, wherein, to identify one or more of the second users that are located within a threshold distance of the location of the first users, the software is further operable when executed to:
- map location information associated with each of at least one of the nodes corresponding to the second users to one of a plurality of geographic regions; and
- map the location data to a first geographic region of the plurality of geographic regions.
5839088 | November 17, 1998 | Hancock et al. |
5848373 | December 8, 1998 | DeLorme et al. |
5950200 | September 7, 1999 | Sudai et al. |
5956397 | September 21, 1999 | Shaffer et al. |
5963951 | October 5, 1999 | Collins |
5968109 | October 19, 1999 | Israni et al. |
5974419 | October 26, 1999 | Ashby |
5978768 | November 2, 1999 | McGovern et al. |
6014090 | January 11, 2000 | Rosen et al. |
6047236 | April 4, 2000 | Hancock et al. |
6052122 | April 18, 2000 | Sutcliffe et al. |
6061681 | May 9, 2000 | Collins |
6073105 | June 6, 2000 | Sutcliffe et al. |
6073138 | June 6, 2000 | de l'Etraz et al. |
6175831 | January 16, 2001 | Weinreich et al. |
6202023 | March 13, 2001 | Hancock et al. |
6223122 | April 24, 2001 | Hancock et al. |
6249282 | June 19, 2001 | Sutcliffe et al. |
6266612 | July 24, 2001 | Dussell et al. |
6269369 | July 31, 2001 | Robertson |
6324541 | November 27, 2001 | de l'Etraz et al. |
6326918 | December 4, 2001 | Stewart |
6339397 | January 15, 2002 | Baker |
6339744 | January 15, 2002 | Hancock et al. |
6343274 | January 29, 2002 | McCollom et al. |
6343317 | January 29, 2002 | Glorikian |
6347230 | February 12, 2002 | Koshima et al. |
6349257 | February 19, 2002 | Liu et al. |
6349290 | February 19, 2002 | Horowitz et al. |
6353785 | March 5, 2002 | Shuman et al. |
6356812 | March 12, 2002 | Cragun |
6356838 | March 12, 2002 | Paul |
6360167 | March 19, 2002 | Millington et al. |
6363427 | March 26, 2002 | Teibel et al. |
6366962 | April 2, 2002 | Teibel |
6370510 | April 9, 2002 | McGovern et al. |
6370513 | April 9, 2002 | Kolawa et al. |
6370566 | April 9, 2002 | Discolo et al. |
6374177 | April 16, 2002 | Lee et al. |
6381603 | April 30, 2002 | Chan et al. |
6401039 | June 4, 2002 | Baron et al. |
6408309 | June 18, 2002 | Agarwal |
6505121 | January 7, 2003 | Russell |
6542748 | April 1, 2003 | Hendrey et al. |
6618593 | September 9, 2003 | Drutman et al. |
6701307 | March 2, 2004 | Himmelstein et al. |
6735568 | May 11, 2004 | Buckwalter et al. |
6741188 | May 25, 2004 | Miller et al. |
6906643 | June 14, 2005 | Samadani et al. |
7010308 | March 7, 2006 | Hendrey |
7071842 | July 4, 2006 | Brady, Jr. |
7072963 | July 4, 2006 | Anderson et al. |
7876215 | January 25, 2011 | Brady |
8102253 | January 24, 2012 | Brady, Jr. |
20020051540 | May 2, 2002 | Glick et al. |
20020054082 | May 9, 2002 | Karpf |
20020086676 | July 4, 2002 | Hendrey et al. |
20020106066 | August 8, 2002 | Swanson et al. |
20020123934 | September 5, 2002 | Tanaka et al. |
20020151315 | October 17, 2002 | Hendrey |
20030063072 | April 3, 2003 | Brandenberg et al. |
20030069693 | April 10, 2003 | Snapp et al. |
20030074471 | April 17, 2003 | Anderson et al. |
20030154194 | August 14, 2003 | Jonas |
20040034601 | February 19, 2004 | Kreuzer |
20040064334 | April 1, 2004 | Nye |
20040066330 | April 8, 2004 | Knockeart et al. |
20040068582 | April 8, 2004 | Anderson et al. |
20040076279 | April 22, 2004 | Taschereau |
20040077359 | April 22, 2004 | Bernas et al. |
20040078489 | April 22, 2004 | Anderson et al. |
20040104842 | June 3, 2004 | Drury et al. |
20040110515 | June 10, 2004 | Blumberg et al. |
20040117358 | June 17, 2004 | von Kaenel et al. |
20040139049 | July 15, 2004 | Hancock et al. |
20040144301 | July 29, 2004 | Neudeck et al. |
20040148275 | July 29, 2004 | Achlioptas |
20040198398 | October 7, 2004 | Amir et al. |
20040266457 | December 30, 2004 | Dupray |
20050003831 | January 6, 2005 | Anderson |
20050015307 | January 20, 2005 | Simpson et al. |
20060200492 | September 7, 2006 | Villena et al. |
20070005373 | January 4, 2007 | Villena et al. |
20080133716 | June 5, 2008 | Rao et al. |
- U.S. Appl. No. 10/462,142, filed Jun. 16, 2003, Abrams.
- U.S. Appl. No. 10/854,054, filed May 26, 2004, Galbreath et al.
- U.S. Appl. No. 10/854,057, filed May 26, 2004, Galbreath et al.
- “MySQL Reference Manual”, <http://dev.mysql.com/doc/mysql/en/index.html>, §§ 19.1 and 19.6 (2004).
Type: Grant
Filed: Oct 19, 2011
Date of Patent: Apr 29, 2014
Assignee: Facebook, Inc. (Menlo Park, CA)
Inventors: Nicholas Galbreath (Tokyo), Yuh-Wen Soung (Saratoga, CA)
Primary Examiner: Omar Fernandez Rivas
Assistant Examiner: Cuong Luu
Application Number: 13/277,008
International Classification: G06G 7/48 (20060101);