US6701317B1 - Web page connectivity server construction - Google Patents

Web page connectivity server construction Download PDF

Info

Publication number
US6701317B1
US6701317B1 US09/664,617 US66461700A US6701317B1 US 6701317 B1 US6701317 B1 US 6701317B1 US 66461700 A US66461700 A US 66461700A US 6701317 B1 US6701317 B1 US 6701317B1
Authority
US
United States
Prior art keywords
url
urls
host
index
database
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime, expires
Application number
US09/664,617
Inventor
Janet Lynn Wiener
Michael Burrows
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
R2 Solutions LLC
Altaba Inc
Original Assignee
Overture Services Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Overture Services Inc filed Critical Overture Services Inc
Priority to US09/664,617 priority Critical patent/US6701317B1/en
Assigned to ALTA VISTA COMPANY reassignment ALTA VISTA COMPANY ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: BURROWS, MICHAEL, WIENER, JANET L.
Assigned to OVERTURE SERVICES, INC. reassignment OVERTURE SERVICES, INC. ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: ALTA VISTA COMPANY
Priority to US10/737,729 priority patent/US7260583B2/en
Application granted granted Critical
Publication of US6701317B1 publication Critical patent/US6701317B1/en
Assigned to YAHOO! INC reassignment YAHOO! INC MERGER (SEE DOCUMENT FOR DETAILS). Assignors: OVERTURE SERVICES, INC
Assigned to EXCALIBUR IP, LLC reassignment EXCALIBUR IP, LLC ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: YAHOO! INC.
Assigned to YAHOO! INC. reassignment YAHOO! INC. ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: EXCALIBUR IP, LLC
Assigned to EXCALIBUR IP, LLC reassignment EXCALIBUR IP, LLC ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: YAHOO! INC.
Assigned to STARBOARD VALUE INTERMEDIATE FUND LP, AS COLLATERAL AGENT reassignment STARBOARD VALUE INTERMEDIATE FUND LP, AS COLLATERAL AGENT PATENT SECURITY AGREEMENT Assignors: ACACIA RESEARCH GROUP LLC, AMERICAN VEHICULAR SCIENCES LLC, BONUTTI SKELETAL INNOVATIONS LLC, CELLULAR COMMUNICATIONS EQUIPMENT LLC, INNOVATIVE DISPLAY TECHNOLOGIES LLC, LIFEPORT SCIENCES LLC, LIMESTONE MEMORY SYSTEMS LLC, MERTON ACQUISITION HOLDCO LLC, MOBILE ENHANCEMENT SOLUTIONS LLC, MONARCH NETWORKING SOLUTIONS LLC, NEXUS DISPLAY TECHNOLOGIES LLC, PARTHENON UNIFIED MEMORY ARCHITECTURE LLC, R2 SOLUTIONS LLC, SAINT LAWRENCE COMMUNICATIONS LLC, STINGRAY IP SOLUTIONS LLC, SUPER INTERCONNECT TECHNOLOGIES LLC, TELECONFERENCE SYSTEMS LLC, UNIFICATION TECHNOLOGIES LLC
Assigned to R2 SOLUTIONS LLC reassignment R2 SOLUTIONS LLC ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: EXCALIBUR IP, LLC
Assigned to AMERICAN VEHICULAR SCIENCES LLC, BONUTTI SKELETAL INNOVATIONS LLC, MONARCH NETWORKING SOLUTIONS LLC, UNIFICATION TECHNOLOGIES LLC, MOBILE ENHANCEMENT SOLUTIONS LLC, CELLULAR COMMUNICATIONS EQUIPMENT LLC, NEXUS DISPLAY TECHNOLOGIES LLC, SUPER INTERCONNECT TECHNOLOGIES LLC, STINGRAY IP SOLUTIONS LLC, R2 SOLUTIONS LLC, TELECONFERENCE SYSTEMS LLC, SAINT LAWRENCE COMMUNICATIONS LLC, INNOVATIVE DISPLAY TECHNOLOGIES LLC, LIFEPORT SCIENCES LLC, PARTHENON UNIFIED MEMORY ARCHITECTURE LLC, LIMESTONE MEMORY SYSTEMS LLC, ACACIA RESEARCH GROUP LLC reassignment AMERICAN VEHICULAR SCIENCES LLC RELEASE OF SECURITY INTEREST IN PATENTS Assignors: STARBOARD VALUE INTERMEDIATE FUND LP
Assigned to R2 SOLUTIONS LLC reassignment R2 SOLUTIONS LLC CORRECTIVE ASSIGNMENT TO CORRECT THE ASSIGNEE NAME PREVIOUSLY RECORDED ON REEL 053654 FRAME 0254. ASSIGNOR(S) HEREBY CONFIRMS THE RELEASE OF SECURITY INTEREST GRANTED PURSUANT TO THE PATENT SECURITY AGREEMENT PREVIOUSLY RECORDED. Assignors: STARBOARD VALUE INTERMEDIATE FUND LP
Assigned to STARBOARD VALUE INTERMEDIATE FUND LP, AS COLLATERAL AGENT reassignment STARBOARD VALUE INTERMEDIATE FUND LP, AS COLLATERAL AGENT CORRECTIVE ASSIGNMENT TO CORRECT THE THE ASSIGNOR NAME PREVIOUSLY RECORDED AT REEL: 052853 FRAME: 0153. ASSIGNOR(S) HEREBY CONFIRMS THE ASSIGNMENT. Assignors: R2 SOLUTIONS LLC
Adjusted expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99942Manipulating data structure, e.g. compression, compaction, compilation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99943Generating database or data structure, e.g. via user interface
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99944Object-oriented database structure
    • Y10S707/99945Object-oriented database structure processing

Definitions

  • the invention relates to techniques for collecting, arranging, and coordinating information pertaining to the connectivity of Web pages and, more particularly, to the construction of a connectivity server, including a data structure incorporating a URL Database, a Host Database and a Link Database, the connectivity server for facilitating efficient and effective representation and navigation of Web pages.
  • the World Wide Web is constituted from the entire set of interlinked hypertext documents that reside on Hypertext Transfer Protocol (HTTP) servers that are globally connected by Internet.
  • Documents resident on the Web are generally written in a mark-up language such as HTML (Hypertext Markup Language) and are identified by URLs (Uniform Resource Locators).
  • URLs correspond to addresses of Internet resources and serve to specify the protocol to be used in accessing a resource, as well as the particular server and pathname by which the resource may be accessed.
  • Files are transmitted from a Web server to an end user under HTTP.
  • Codes, called tags, that are embedded in an HTML document associate particular words and images in the document with URLs, so that an end user can access other Web resources, regardless where physically located, upon the activation of a key or mouse.
  • Web browsers Users of client computers use Web browsers to locate Web pages that, as indicated above, are identified by URLs.
  • Specialized servers, called search engines maintain indices of the contents of Web pages.
  • the browsers may be used to pose textual queries.
  • the search engines return result sets of URLs that identify Web pages that satisfy the queries.
  • the result sets are rank ordered according to relevance.
  • information related to the connectivity of Web pages such as the number of links to or from a page, can be used as a tie-breaking mechanism in ranking the result sets or as an input in deciding the relative importance of result pages.
  • the URL names of the result sets may then be used to retrieve the identified Web pages, a s well as other pages connected by “hot links.”
  • users are interested in more than merely the content of the Web pages. Specifically, users may be interested in the manner in which Web pages are interconnected. In other words, users may be interested in exploring the connectivity information embedded within the Web for practical, commercial, or other reasons.
  • the connectivity information provided by search engines exists largely as a byproduct of their paramount function. Although an unsophisticated user may easily follow a trail between connected Web pages, the extraction of global view of connectivity quickly becomes tedious.
  • the connectivity representation in the search engines serves a single purpose: to provide answers to queries. However, determination of all pages that are, for example, two links removed from a particular page may require thousands of queries, and a substantial amount of processing by the user. Without a separate representation of the Web, it is very difficult to provide linkage information. In fact, most search engines fail to provide access to any type of connectivity information.
  • a database may be constructed on the fly or statically. When constructed on the fly, each new page is parsed as it is accessed in order to identify links. The linked neighboring pages are retrieved until the required connectivity information is gathered. When statically constructed, a connectivity database is essentially rebuilt from scratch whenever updates are required.
  • LinalertTM provided by Lycos uses static databases specifically designed to offer linkage information for particular Web sites. Earlier implementations of both on-the-fly and static approaches have proven inefficient and clumsy to use, and do not comprehend to the entire Web and a large number of clients. Consequently, prior-art implementations of connectivity databases generally perform poorly and/or are limited in scope.
  • U.S. Pat. No. 6,073,135, entitled “Connectivity Server for Locating Linkage Information Between Web Pages,” hereby incorporated by reference, is directed to a server that enables convenient and efficient representation and navigation of connectivity information of Web pages.
  • the server described therein (hereinafter “CS 1 ”) maintains accurate linkage information for a significant portion of the Web and supports a large number of client users that desire numerous variants of connectivity information.
  • the system dynamically updates the connectivity information so that the linkage information is current.
  • FIGS. 1 through 9 of the Drawings depict the implementation of CS 1 in accordance with U.S. Pat. No. 6,073,135.
  • the Web is shown to comprise a widely distributed network of computers 100 that include numerous client computers 110 connected to server computers 120 by a network 130 .
  • servers 120 provide information, products, and services to users of the clients 110 .
  • Client computers 110 may be personal computers (PCs), workstations, or laptops. Typically, clients are equipped with input/output devices 115 , such as a keyboard, mouse, and display device 115 .
  • Software in the form of a Web browser 111 interacts with devices 115 to provide an interface between the user and the Web.
  • the server computers 120 are usually larger computer systems, although this does not always need to be so.
  • Some of the servers also known as “Web sites,” maintain a database (DB) 121 of Web pages 122 .
  • DB database
  • Web pages are usually formatted using HTML, which establishes links to other pages. A user is afforded the opportunity to “click” on a link within a page viewed with the browser in order to access a “pointed to” page.
  • Search engines in the form of servers 140 , maintain an index 141 of the contents of Web pages.
  • client users may locate pages having specific content of interest to the users.
  • the user specifies pages of interest to the API of the search engine 140 by composing queries that are processed by the search engine's API 142 .
  • Connectivity server 150 maintains a connectivity database 151 .
  • connectivity server API 152 users may locate pages (URLs) according to the definition of the interconnection between pages.
  • a graph 200 is built to represent the connectivity of Web pages.
  • each node (A, . . . , G) 210 represents a Web page 122 .
  • Each edge for example an edge (AB) 220 represent a link from one page to another, for example, with edge AB representing a link from page A to page B.
  • the connectivity API 152 in various forms, enables client users to “explore” or navigate” graph 200 to extract connectivity information.
  • Graph 200 is built, maintained, and traversed as follows.
  • the input utilized in building the graph is provided by the search engine 140 .
  • the input for constructing the graph may also come from other sources.
  • the input for constructing graph 200 is a set of URLs ⁇ URL A, . . . , URL Z ⁇ 310 .
  • URL set 310 identifies known Web pages 122 .
  • the URLs or names of the set 310 are first lexicographically sorted in module 320 .
  • the sorted URLs are delta encoded in module 330 to produced a list 340 .
  • each entry 341 is stored in as a difference (delta) between the current URL and a previous URL. Because pages maintained at the same site are likely to have fairly large prefix portion in common, storage reduction due to delta encoding is considerable. For 100 million URLs, storage may be reduced by about 70%.
  • each entry 341 of the list 340 includes the following fields: a size field 342 that indicates the number of common bytes with the previous URL; a delta field 343 that stores the bytes that are different than the shared prefix, terminated by a zero byte 344 ; finally, a field (Node ID) 345 identifies the node that represents the corresponding page.
  • Delta encoding URL values comes at a price, namely an increase in the processing required to perform during an inverse translation to recover a full URL.
  • a price namely an increase in the processing required to perform during an inverse translation to recover a full URL.
  • This situation may be ameliorated by periodically remembering an entire URL as a checkpoint URL entry 350 .
  • the checkpoints 350 can be maintained as a separate sorted list 360 on which a binary search can be applied. Thus, once the closest preceding checkpoint URL 350 has been located, only the delta values from that point on need be applied.
  • the cost of inverse translation can be controlled by the number of entries 350 in the checkpoint list 360 .
  • a checkpoint entry may be maintained for approximately every thousand bytes of URL data in the list 340 .
  • Each pair 420 includes the node ID of a first (URL 1 ) 421 , and a second node ID (URL 2 ) 422 of a second page that contains a link to the first page.
  • the pairs 420 essentially indicate the connectivity of the pages.
  • the pairs may be obtained from a search engine 140 or from other sources.
  • the list 410 is sorted twice ( 431 , 432 ), first according to the first node ID 421 to produce an inlist table 441 , and, second, according to the second node ID 422 to produce an outlist table 442 .
  • the inlist table contains only the second node ID from each pair: the high order bit (bit 32 ) 450 of a list entry is set to indicate the end of a group of common connected nodes, that is a group of nodes that point to the same page P.
  • the entry 510 described below and illustrated in FIG. 5, corresponding to P contains a field 512 that points to the beginning of the group of nodes within the inlist that point to P.
  • the outlist table is organized in a similar way. In other words, each edge 220 of the graph 200 is represented twice to indicate pages pointing to a particular page, and to indicate pages pointed to from a particular page.
  • graph 200 itself is maintained as an array 500 .
  • the nodes of the graph are represented by elements 510 of the array 500 .
  • Each element 510 includes three fields 511 , 512 and 513 .
  • Field 511 stores a pointer (URL pointer) to the delta-encoded list 340 of FIG. 3 .
  • Fields 512 and 513 point to the corresponding respective inlist 441 and outlist 442 .
  • field 511 points to the node name
  • field 512 points to the incoming edges
  • field 513 points to the outgoing edges.
  • a user is able to explore the connectivity of the Web by supplying an input URL (URL in) 601 .
  • the input URL 601 is used to binary (or interpolation) search 610 the checkpoint list 360 to locate the closest delta checkpoint 350 .
  • delta values 343 are applied in a Delta Scan module 620 until a full URL 621 equal to the input 601 is recovered.
  • the associated node ID 345 is used to index, via module 630 , the array 500 . Indexing the array 500 locates a start node 631 from which connectivity can be explored in step 640 .
  • Graph 200 can be navigated to the depth desired using the inlist table 441 and outlist table 442 , thereby producing an output list of URLs (URLs out) 609 .
  • FIG. 7 depicts in greater detail a data structure (ID-to-URL Array) 511 that is used to recover a full URL from a node ID.
  • ID-to-URL Array a data structure (ID-to-URL Array) 511 that is used to recover a full URL from a node ID.
  • the array 511 one entry exists for each node 210 in graph 200 .
  • Entries 701 point to the nearest checkpoint URL 350 for each node in the checkpoint list 360 .
  • Subsequent delta values 343 are applied until an entry with a matching node ID 345 is found. At this pint, the full URL 709 has been recovered.
  • the above-referenced process is illustrated in FIG. 8 .
  • the input to the process is one of the output URLs 609 of FIG. 6 .
  • the node ID is used as an index in the ID-to-URL table 511 to determine a closest checkpoint 350 . Delta values are decoded until the matching node ID in field 345 is found, at which point the full URL 709 has been recovered.
  • the connectivity data structures 151 may, in one embodiment, be stored in a hard disk, or disk array, associated with server 150 .
  • the connectivity structures 151 include the delta encoded list 340 of URLs, including checkpoints, as well as inlist and outlist tables 441 and 442 , the node ID array 500 , and the ID-to-URL array 511 .
  • Connectivity processes 910 are operable to locate a starting node in the graph 200 for a given URL. The processes 910 can also navigate the graph 200 to locate connected nodes.
  • Data structure 151 may be updated to add new nodes and edges that correspond to newly found pages and links, or to delete portions of the graph for which Web pages are no longer accessible.
  • Connectivity server 150 includes the following APIs.
  • a first API 911 interfaces to the search engine 140 . This interface is used to obtain the URLs of Web pages that are represented by the nodes of the graph.
  • a Web API 912 is connected to a conventional Web HTTP server 920 to provide a World Wide Web interface 921 .
  • a public API 913 is provided for public clients 930
  • a private API 914 is provided for private clients 940 .
  • the private API 914 allows access to more efficient data structures and processes for privileged users. A user may gain access to the APIs with the browser 111 of FIG. 1 .
  • a basic connectivity query assumes the form: “List L,” where L is the URL of a Web page.
  • the connectivity server supplies a list of all URLs pointing to Web page L, as well as all Web pages pointed to by page L.
  • a neighborhood query assumes the form: “List L, D,” where D specifies the degree of connectivity to be explored.
  • the connectivity server's response will be a list of URLs at a distance D from page L. It should be understood that more complex queries may be composed specifying logical combinations of URLs and distances.
  • a private query allows users to pose queries in an internal format of the connectivity server; and the server's response may include more detailed information, such as names of the servers storing the connected pages.
  • the connectivity server provides linkage information for a significant portion of the Web.
  • the information can be used by applications that rank Web pages according to their connectivity. For instance, pages with many connections may be considered authoritative pages, or “hubs.”
  • the information can be used to build Web visualization and navigation tools, and can be used in conjunction with search engine results to lead users to portions of the Web that store content that may be of interest.
  • the technique may be used to optimize the design and implementation of Web crawlers based on statistics derived from the in degrees and out degrees of nodes.
  • the connectivity server described above may be implemented on Digital Equipment Corporation 300 MHz Alpha processors configured with 4 GB of RAM and a 48 GB disk.
  • Graph 200 included 230 M nodes with about 360 M edges.
  • the average storage space for each URL is approximately 25 bytes for a total of 5.6 Gigabytes for the delta compressed URL database.
  • the connectivity server responds to user queries at the rate of about one URL every 0.1 millisecond.
  • the connectivity server described above may fairly be viewed as a substantial advance in the techniques formerly available for extracting connectivity information related to Web pages, there remain opportunities for further significant advances that are addressed by the subject invention. For example, further compression of both URLs and links results in the ability to store appreciably more information in the same quantity of physical storage media.
  • the subject invention enables connectivity information to be extracted more rapidly than heretofore, thereby facilitating applications such as the static ranking of pages (eigenranks), query precomputation, mirror site detection and related-page identification.
  • the salient process steps include:
  • Another aspect of the invention inheres in a process for constructing a URL Database for a connectivity server.
  • the process comprises the steps:
  • FIG. 1 is a block diagram of a distributed computer network in which various clients 110 are coupled through the Internet to various servers, including an earlier-generation connectivity server 150 , and to a search engine 142 .
  • FIG. 2 is a graphical representation of the connectivity of a number of Web pages, corresponding to information that is stored in a connectivity server.
  • FIG. 3 is a flow diagram of the process employed by CS 1 to encode names of Web pages (URLs).
  • FIG. 4 is a flow graph depicting a process used by CS 1 to generate an Inlist Table 441 and an Outlist Table 442 , as those tables are constructed by CS 1 .
  • FIG. 5 is a block diagram of an array embodied in CS 1 that constitutes a compilation and an arrangement of connectivity information.
  • FIG. 6 is a flow diagram of process perform by CS 1 in locating a node in an interconnected set of web pages, as exemplified in FIG. 2, based on use of the array depicted in FIG. 5 .
  • FIG. 7 is a flow diagram of a process used in CS 1 for translating node identifications to a URL of a Web page.
  • FIG. 8 is a block diagram of CS 1 .
  • FIG. 9 is a block diagram of an exemplary embodiment of the operating environment of a connectivity server, including the connectivity server described herein.
  • FIG. 10 is a system block diagram depicting a connectivity server that includes a URL Database, a Host Database, and a Link Database.
  • FIG. 11 is a graphical depiction of the prefix compression performed on URLs stored in the URL Database of the subject invention.
  • FIG. 12 is a graphical depiction of the manner in which the ID Index Array maps into compressed URLs in accordance with the subject invention.
  • FIG. 13 is a representation of the ID Index as a hash table that maps URL fingerprints to CS_ids.
  • FIG. 14 depicts a Host Table in which consecutively numbered Host_ids are defined by the starting CS_id in a series on the same host.
  • the Host Table is shown to also store the number of CS_ids in the series, the Host_id for the series, and the row number of the next highest row in the Host Table with the same Host_id.
  • FIG. 15 graphically depicts the manner in which the Host Index and Host Table are used to find a Host_id for a given CS_id.
  • FIG. 16 illustrates the logical structure of the outstarts array and the outlinks array, before compression.
  • FIG. 17 illustrates the stored delta values for the outlinks illustrated in FIG. 16 .
  • FIG. 18 illustrates the sizes of bit-compressed delta values in the outlinks array.
  • FIG. 19 depicts the delta outstarts corresponding to FIG. 18, when each starts array is compressed by division into groups of, for example, four entities.
  • one embodiment of the invention comprises a connectivity server that includes a URL database, a Host database and a Link database.
  • the URL database stores URLs; the Host database stores information about the URLs; and the Link database stores information about links between the URLs.
  • the connectivity server stores the information, in specialized data structures that will be described in detail below, and controls access to the URL, Host and Link databases.
  • all the databases are stored in RAM resident on a single processor. In this form, access to the URLs and links is fact enough to enable applications that touch every link, even multiple times, to execute, in real time, in minutes or hours.
  • the connectivity server is characterized by data structures that implement data compression effective to store the crawled portion of the Web in RAM: that is, 300 M URLs and 2 B links in approximately 13 Gb.
  • CS 2 Connectivity Server
  • the URL Database stores all URLs and associates with each URL a 64-bit fingerprint (FP) and a unique 32-bit internal identifier (CS_id).
  • FP 64-bit fingerprint
  • CS_id unique 32-bit internal identifier
  • the URL Database includes an interface that translates between pairs of associated URLs, FPs and CS_ids. That is, the interface functions, inter alia, as a URL-to-FP, URL-to-CS_id, FP-to-URL, FP-to-CS_id, CS_id-to-URL, and CS_id-to-FP translator.
  • the URL index is an index from compressed URLs to CS_ids
  • the CS_id index is an index from FPs to CS_ids.
  • URL-to-FP translation may be accomplished through a deterministic mathematical function.
  • the function is a hash function that returns a unique 64-bit integer corresponding to each unique URL string, for up to 2 32 strings. Many such functions are known to those skilled in the art, and all such functions that have the requisite uniqueness characteristics are candidates for use in the context of the subject invention.
  • similar mathematical functions exist to return the maximum and minimum CS_ids. CS_ids are consecutive between the minimum and the maximum.
  • URLs are stored in the URL database, which is divided into N partitions of unequal size.
  • the “importance” of a URL is commensurate with the indegree and the outdegree of the URL.
  • the outdegree of a URL is equal to the number of links emanating from the URL.
  • the indegree of a URL is equal to the number of links pointing to the URL.
  • Partition 0 is occupied by URLs with indegree or outdegree greater than or equal to 255.
  • Partition 1 is occupied by URLs with indegree or outdegree greater than or equal to 16, but less than 255; and Partition 2 is occupied by with the remaining URLs. It has been empirically determined that the URL population, as a percentage of all URLs, for Partition 0 , Partition 1 , and Partition 2 is, respectively, approximately 0.4%, 19% and 81%.
  • URLs are sorted lexicographically, and CS_ids are assigned to the URLs sequentially, starting with Min(CS_id) in Partition 0 and Max(CS_id+1) for Partition (N ⁇ 1), that is, Partition 2 in the instant embodiment. Therefore, within each partition, consecutive CS_ids correspond lexicographically to similar URLs. In particular, URLs share a common prefix.
  • the compressed URL data structure stores the URLs in chunks of M URLs. Each chunk of URLs is compressed separately. First, the URL scheme “http://” is discarded, thereby reducing the length of the URL by seven characters. Second, a prefix compression is applied. The prefix compression writes a 0 followed by the entire first URL. For each subsequent URL, URL i , where i ⁇ 1, the prefix compression writes a one-byte integer having a value between 0 and 255. The integer represents the length of the common prefix shared by URL i and URL i ⁇ 1 , followed by the remainder of URL i , after the common prefix. In one embodiment, the prefix compression reduces the average URL length about 67%, from 44 to 14.5 bytes. FIG.
  • FIG. 11 shows seven consecutive URLs in Partition 0 , before and after the prefix compression.
  • a second compression routine is applied to the prefix-compressed chunk of URLs.
  • the second compression routine is performed in accordance with the ZLIB Compressed Data Format Specification, Version 1.1.3
  • the second data compression reduces the average length of URLs another 37%, to 9.2 bytes per URL. Chunks of doubly-compressed URLs with consecutive CS_ids are stored in contiguous bytes in the URLs files. A separate file is supported for each partition.
  • the URL Index is an array with one entry per chunk of M URLs. Each entry logically points to a compressed chunk of M URLs by containing the byte offset of that chunk from the start of the compressed URLs file.
  • FIG. 12 shows the URL Index for the URLs in FIG. 11 .
  • the URL Index is an array of 64-bit integers.
  • the array indexes are a function of the CS_ids contained in the chunk, M, and the Min[CS_id] for that partition.
  • the URL Index is written separately for each partition.
  • the ID Index is a hash table that maps from fingerprints to CS_ids.
  • the hash table has a multiple of 2 24 buckets, and the hash key is the high (most significant) 24 bits of the fingerprint. Only the remaining 40 bits of the fingerprint and the CS_id are stored in each entry in the hash table.
  • Each primary bucket of the hash table is 32 bytes long and contains three entries (at most), a count of the number of entries in the bucket, and a logical pointer into an overflow table.
  • the overflow table is an array of entries sorted by bucket.
  • the pointer is the array index of the first overflow entry for that bucket. All overflow entries derived from a single bucket are contiguous.
  • FIG. 13 depicts a portion of an exemplary bucket.
  • the most significant 24 bits are used to choose a bucket, and then the entries in the bucket are searched sequentially to find a match. If there are greater than three entries, then the count is used to limit the number of entries searched in overflow. Within each bucket, the entries are sorted by decreasing indegree. In this manner, it is anticipated that the most frequently accessed entries will be found fastest.
  • the host database associates a unique 32-bit internal host identifier, Host_id, with each distinct hostname in the URL database.
  • a hostname is the portion of the URL after “http://” and before the next “/”.
  • the hostname may include a port number. Every URL and CS_id in the database maps to exactly one Host_id.
  • the Host Database interface includes functions that accept a CS-id and return a Host_id and that accept a Host_id and return either the number of URLs on that host or the CS_id of (at most, N) URLs on that host, for a user-defined N.
  • Host_ids are not densely packed. However, the Host database interface also has the capability to return the first Host_id and the “next” Host_id.
  • the Host Table data structure comprises four columns of four bytes each.
  • the columns include the starting CS_id of a consecutive series of CS_ids on the same host, the number of CS_ids in the series, the Host_id for the series, and the row number of the next highest table row with the same Host_id.
  • a Host_id is the row number of the first table row with CS_ids on that host.
  • the table rows are sorted by starting CS_ids in ascending order.
  • FIG. 14 shows a Host Table. Note that Row 0 is always empty.
  • the variable P is a predetermined integer chosen to effect a balance between the size of the Host Index and the number of Host Table entries that might be searched after a single Host Index lookup.
  • the Host Index has nURLs/P entries.
  • the number of Host Table entries to be searched after a lookup is nURLs/(nhosts*P), where, in at least one dataset the quantity (nURLs/nhosts) is equal to approximately 50.
  • the host database also includes a Host Index.
  • the Host Index is an array of nURLs/P entries. Each array entry i contains the largest host table row number whose starting CS_id is less than or equal to (i*P). To find the Host_id for a given CS_id, the connectivity server requires one lookup in the Host Index to find a row. Then the Host Table is scanned sequentially starting from that row number until the correct row is found.
  • the Link Database stores all links. Each link extends between a source URL, A, and a destination URL, B. A link is stored in both directions, that is, as an outlink of A and as an inlink of B.
  • the Link Database interface operates to retrieve, for a given CS_id, the number of associated outlinks or inlinks, as well as the CS_id of a user-specified number of outlinks or inlinks.
  • the Link Database interface provides the option of retrieving either the Host_id of each CS_id, or a Boolean value that indicates whether the respective outlink or inlink resides on the same host as does the input CS_id.
  • the outlinks are stored in two arrays.
  • An array of “starts” is indexed by source CS_id, and contains elements are offsets in an array of “links”.
  • the elements of links array are the destination CS_ids.
  • the outlinks of CS_id A are stored in links[starts[A]] to links [starts[A+1] ⁇ 1].
  • the outlinks of a given CS_id are stored in the same order as they appeared on a page, after duplicate links are removed.
  • inlinks are stored the same way as outlinks. However, the inlinks of a given CS_id are stored in sorted ascending order by inlink CS_id.
  • FIG. 16 shows the logical structure of the outstarts and outlinks arrays, before compression.
  • both the starts and links arrays are compressed and divided by partition.
  • the outlinks link array entries are first rewritten as delta values.
  • the first destination CS_id B in links [starts[A]] has a delta value of B-A.
  • the remaining destination CS_ids in links [i] have delta values of links[i]-links[i ⁇ 1].
  • Delta values fall in the range [CS_idminid-CS_id_maxid] to [CS_id_maxid—CS_id_minid]. That is, some delta values may be negative numbers, although all CS_ids are positive. Therefore, the maximum number of bits needed to store a delta value is 33, not 32, assuming that only one bit is used to store the sign.
  • the delta values are then compressed using a fixed-bit compression scheme, so that they use a variable number of bits, dependent on the delta value.
  • FIG. 17 shows the delta values for the outlinks in FIG. 16 .
  • the bit compression scheme stores values in multiples of four bits. Each four-bit multiple contains a stop bit and three data bits. For each value stored in 4 N bits, the first (N ⁇ 1) stop bits are 0 and the N th stop bit is 1. The 3 N data bits store the delta value. As a result, small numbers can be stored in a small number of bits. Each value is first encoded using a sign and magnitude scheme. The low (least significant) bit is the sign, and the remaining bits are the magnitude or absolute value. The value is then divided into groups of three bits, and the stop bits are added. The maximum size of a bit-compressed delta value is 33 data bits, plus 11 stop bits, represented in 11 four-bit quantities. FIG. 18 shows the sizes of the bit-compressed delta values for the outlinks in FIG. 16 .
  • the inlinks link array is similar to the outlinks link array and stores the source CS_ids A that have links to a given destination CS_id B. However, since inlinks are stored in ascending CS_id order, only the first delta value for a given CS_id B can be negative. In one embodiment, therefore, no sign bit is stored for the remaining source delta values.
  • a separate inlinks and outlinks link array is stored for each URL/CS_id partition.
  • the starts offsets to compressed link arrays contain offsets of four-bit quantities. Therefore, each array is further subdivided if it exceeds (4)(2 32 ) bits, so that all compressed values begin at an offset less than 2 32 from the start of the array.
  • each starts array entry is an array offset that can be represented in 32 bits.
  • Each starts array is compressed by dividing the array into groups of Q entries. Because in Partition 0 , there are an unlimited number of both outlinks and inlinks, there is no maximum difference between successive offsets. No compression is imparted to the starts arrays. Inasmuch as the starts arrays for the outlinks and inlinks are identical, hereinafter in this Description only the outlinks starts array will be referred to.
  • a set of compressed ASCII links files forms the input to the construction methodology (algorithm) that is used to compile the CS 2 databases.
  • each links file there exists a series of source URLs.
  • Each source URL is followed by a (possibly empty) list of corresponding destination URLs.
  • the links files are provided filenames that include timestamps, so that a lexicographic sort of the filenames yields the files in chronological order.
  • the input to the construction algorithm may optionally include an ASCII list of URLs that may, for any one of a number of reasons, be deemed “special”. For example, URLs in AltaVista's current index are deemed special URLs.
  • the output of the construction process constitutes the CS 2 data structures, as have been described above.
  • the build algorithm comprises several Phases, which are described seriatim below.
  • effort is directed toward building at least one, but sometimes more than one, data structure.
  • Temporary data structures that are created in the construction of permanent data structures are also described below.
  • a temporary URL_info data structure is created.
  • This data structure assumes the form of a hash table whose keys are the most significant 24 bits of a 64-bit URL fingerprint.
  • Each record in the URL_info Table contains the remaining 40 bits of one unique URL fingerprint, plus associated metadata.
  • the associated metadata includes: the indegree of the URL; the outdegree of the URL; and Boolean values that indicate (1) whether the URL has been a source URL in an input file, (2) whether the URL appears at all in the input files, and (3) whether the URL is in the special file.
  • an outdegree may be represented by a pair of Boolean values that indicate an outdegree magnitude greater than or equal to 16 or an outdegree magnitude greater than or equal to 255.
  • the hash table has a multiple of 2 24 buckets. In the current implementation, each bucket is 64 bytes deep and has storage for eight entries and a pointer to overflow.
  • the URL_info Table is initially empty.
  • CS 1 does not qualify URLs included in a build.
  • the maintenance of statistics on URLs as the URLs are read in the input files is new in CS 2 . These statistics may then be the predicate for prospective decisions, such as which URLs are to be retained and which URLs are most “important.”
  • the links files are read, backwards and in reverse chronological order.
  • a source URL appears multiple times (representing, for example, multiple crawls of the same page)
  • the initial reading of a URL in the links files corresponds to the most recent crawl. It, and its destination URLs, are ignored all other times.
  • URLs are decompressed in advance by a separate, parallel thread and are written to a buffer for processing.
  • each URL is computed and added to the URLs_info Table, assuming it is not already present.
  • For each source URL its outdegree is stored and the Boolean values corresponding to “appears” and “source” are set to TRUE.
  • For each destination URL its indegree is incremented by one, and the Boolean “appears” is set to TRUE.
  • the “K-URLs” file identifies potentially important URLs that may not have been crawled.
  • Destination URLs are counted only once per source URL, and then only if the destination URLs are different from the source URL. For each source URL, its fingerprint, its outdegree, and a list of the destination URL fingerprints are written to the fingerprint-links file.
  • the fingerprint-links file is essentially a copy of the links files, but without duplicates, without compression, and with URLs already converted to fingerprints. It consumes approximately half the number of bytes consumed by the compressed links files and, therefore, requires correspondingly less I/O to read in Phase Six. More importantly, the fingerprint-links file does not require decompression to read in Phase Six, therefore, conserving hours of CPU time.
  • the URL_sort buffers are a set of buffers of URLs. At any given time, URLs are written to one buffer. When that buffer is full, it sorted and then written to disk by a separate, parallel thread. The buffer is then empty. Each full, sorted buffer that is written to disk constitutes a “run”. As a run is written to hard disk, other URLs are written to a different buffer. In one implementation, there are four buffers. The buffers consume all remaining available storage capacity after storage has been allocated to the URLs_info table.
  • the input links files are compressed with gzip.
  • CS 1 the files are decompressed by invoking gzip as a system call through a pipe. This method creates a separate process for each call to gzip.
  • CS 2 the files are decompressed using zlib library functions directly into a buffer in the same process. That is to say, decompression is performed by a separate thread.
  • CS 1 the links files are read in chronological order. Consequently, if a URL appears as a source URL twice, then the two sets of outlinks are merged. However, the most likely reason for a duplicate URL appearance is that the URL was crawled twice. It is preferable to retain only the more recent set of destination URLs.
  • CS 2 the links files are read in reverse chronological order, and bookkeeping is simplified by retaining only the most recent copy of a page, that is, the copy read first.
  • the set of URLs required to be sorted includes each URL, as many times as a URL appears in the links files.
  • a URL is included at most once, since each URL in the links files is “remembered” in the URLs_info Table.
  • a URL is not included at all if it is considered “junk” and is not included in the URL Database.
  • About 60% of the distinct URLs in the links files are considered junk.
  • all sorting is done by the Unix utility sort, in a phase separate from writing the URLs. Using Unix sort requires two copies of the URLs files, and hence twice as much disk space.
  • CS 2 most of the sorting is done before the URLs are written at all, by a C function that is faster and sorts in place, so that no extra disk space or memory is required. In addition, the sorting is done concurrently with reading the links files.
  • the ID Index is created and initialized from the URLs_info Table, with all the fingerprints the Index will contain.
  • the partition number for the CS_id is stored. The partition is based on the URL fingerprint's indegree and outdegree, which are known. Therefore, the URLs_info Table is not needed later to determine the partition.
  • the URLs_info Table and ID Index are hash tables with the same number of buckets and the same hash function, the buckets can be copied from the URLs_info Table in sequential order and written to the ID Index in sequential order. Therefore, it is not necessary that the ID Index reside in memory as it is being created.
  • the URL Database contains only URLs from the links files that either are source URLs, are in the special URLs file, or appear as destination URLs at least K times.
  • CS 1 all URLs in the links files were included.
  • This filter implemented in CS 2 reduces the number of URLs in the URL Database by 60%, the size of the URL Database by over 60%, and the instarts and outstarts tables by almost 60%.
  • the sorted runs of URLs are merged. For each merged URL, its fingerprint is computed and its partition is retrieved from the ID Index. The URL is assigned the next lowest CS_id in its partition, and the ID Index is updated. The URL is then is added to a URL partition. In each partition, after each M URLs are added, the chunk of M URLs is compressed and written to disk and a new URL Index entry is created.
  • a preliminary Host Table is created.
  • the preliminary Host Table has one 16-byte entry for each eventual Host Table entry.
  • Each entry contains the starting CS_id of a series, the number of CS_ids in the series, and the HostFP.
  • a HostFP fingerprint of the host and port number portion of the URL
  • a new preliminary Host Table entry is created for the previous HostFP. Merging of the sorted runs represents the last sorting step.
  • the (final) Host Table is created from the preliminary Host Table.
  • the preliminary Host Table is sorted by CS_id. Then its entries are copied to the Host Table, leaving the Host ID and “next” columns blank.
  • An index on the preliminary Host Table is created and is then sorted by the preliminary Host entry HostFP. The sorted index is then used to identify the Host Table entries with the same HostFP. That is, it is used to fill in the Host ID and “next” columns of the Host Table.
  • the fingerprint-links file is read. Each fingerprint is converted to a CS_id. For each source URL, the set of destination URLs may now be pruned to include only those URLs that are stored in the URL database. Then the set of destination CS_ids is compressed and copied into the next available offset in the preliminary Outlinks Table.
  • the preliminary Outlinks Table contains only compressed destination CS_ids. An entry is made for the source URL in preliminary Outstarts Table that contains the source CS_id, the compressed length of the destination CS_ids, and an offset into the preliminary Outlinks Table. In addition, a histogram of the number of inlinks for each CS_id is created. As each destination CS-id is read, the count of its inlinks is incremented.
  • the links files are decompressed and read only once. Rather than reading the links files a second time to extract the link information, during the first read the data files are rewritten with fingerprints instead of URLs and without gzip compression. This is achieved in approximately half the disk space of the original gzip'd ASCII files. This optimization saves hours of decompression and allows the fast conversion from fingerprints to CS_ids, rather than the much slower compression from URLs to CS_ids.
  • the preliminary outlinks data is compressed when it is written, so it is smaller and faster to write and read. That is, the data is compressed to about 1.5 bytes per link.
  • the preliminary outlinks contains uncompressed (that is, about eight bytes per link) pairs of source and destination CS_ids.
  • the indegree histogram is created while reading the fingerprint-links files, rather than requiring a separate pass over the outlinks. No indegree histogram is available in CS 1 .
  • the preliminary Outstarts Table and the preliminary Outlinks Table are converted to the outstarts and outlinks data structures.
  • the preliminary Outstarts Table is sorted by CS_id.
  • the Outstarts and Outlinks Tables are then created sequentially and written to disk as they are created.
  • the Outstarts Table entry compresses and stores the next available offset in the Outlinks Table. If there is an entry for that CS_id in the preliminary Outstarts Table, then the compressed links are copied to the next available offset in the Outlinks Table, and the next available offset is incremented.
  • Different outstarts and outlinks files are created for each partition. In addition, whenever the next available offset exceeds 2 32 , a new pair of files is created and the next available offset is reset to zero.
  • CS 1 every pair of source and destination CS_ids must be sorted in order to write the Outstarts Table. Because the entire Outstarts Table includes a number of links to large to be stored in available memory, the construction algorithm breaks. In CS 2 , only the preliminary Outstarts Table must be sorted. Because the preliminary Outstarts Table contains at most one entry per CS_id (if the CS-id has any outlinks) rather than an entry derived from each link, the preliminary Outstarts Table in CS 2 is easily accommodated by available memory.
  • the instarts and inlinks data structures are created from the (inverse) link information in outstarts and outlinks. Each partition is processed separately. First, storage is allocated for uncompressed instarts and inlinks. Then, the indegree histogram that had been created in Phase 6 is scanned, and each instart is initialized for exactly the number of inlinks indicated by the histogram.
  • Outstarts and Outlinks Tables are scanned in CS_id order. For each outlink from A to B, if B is in the current partition, then an inlink is added for B (to A) and instarts for B is incremented. At the end of the scan, inlinks is completely filled in, and the instarts entry for CS_id i now indicates the instarts value for CS_id i+1. The instarts entries are adjusted and then the instarts and inlinks tables are compressed and written to disk. Note that since the outlinks are scanned in ascending CS_id order, the inlinks for any given URL B are filled in ascending order. Therefore, the inlinks achieve optimal delta compression, and no sorting is required.
  • the indegree histogram is used to divide the partition into disjoint ranges of CS_ids. Each range is processed separately in the manner described above, except that multiple ranges may contribute to the same outstarts and outlinks file. A new pair of files is created only when the compressed offset in inlinks exceeds 2 32 , as is the case for outlinks.
  • the preliminary Inlinks Table contains each destination CS_id and destination CS-id pair, and must be sorted by source CS_id. Again, this table does not fit in memory and the algorithm breaks.
  • CS 2 no sorting is required, and multiple passes over the in-memory outstarts and outlinks tables allow the instarts and inlinks tables to be created without any temporary data structures on disk.
  • CS 1 uses only prefix compression of URLs, with a maximum prefix length of 63.
  • CS 2 extends the maximum prefix length to 255, thereby alone increasing compression by about 13%, and adds a second prefix compression. Double compression of URLs yields a smaller compressed size than realizable with a single compression process.
  • CS 2 provides a shorter decompression time. Prefix decompression has been empirically determined to require only about 10 microseconds per chunk of 16 URLs. The more effective methods demonstrated decompression times of 100 microseconds or more per chunk. However, prefix decompression plus decompression by a second method of the much smaller, prefix-compressed chunk, requires only approximately 80 microseconds. The URL data structure is therefore reduced by about 45%.
  • the CS_ids are stored in the URLs data structure, after each corresponding URL. Therefore, locating the CS_id for a URL requires locating the URL and URL decompression.
  • the ID Index in CS 1 locates URLs via a binary search on a set of “special” URLs. Binary searching is more time consuming than the hash table search employed by CS 2 . In addition, binary searching compares URLs by string comparison, which is more expensive than comparing fingerprints. Since, in one embodiment of CS 2 , fingerprints are only 64 bits long, they may be compared in one machine instruction.
  • the set of special URLs used in CS 1 constitute uncompressed copies of compressed URLs, and take correspondingly more space, approximately 544 bytes each, than do the five bytes per entry to store the fingerprint in CS 2 .
  • After finding the correct Id Index entry in CS 1 an average of 23 URLs must be decompressed until the matching URL is found. The match is similarly performed by string comparisons on each URL.
  • the Id Index is separate from the URLs, and locating an ID requires only computing the URL's fingerprint and comparing the fingerprint with (on average, four) other fingerprints.
  • the Id Index in CS 1 does serve to locate URLs. However, this index is not an index from Id to URL, because the Id Index entries in CS 1 are not spaced every M URLs (for any value of M, including 1). Consequently, no function of CS_id on the Id Index URLs can locate the URL with CS_id i, and the ID is not stored in the Index. Instead, CS 1 overlays a URL index on the Id Index.
  • the URL Index is an array with one entry per CS_id, indexed by CS_id, whose entries point to URL Index entries. The URL Index is thus much larger than in CS 2 .
  • the URL index in the subject invention locates the correct chunk of M URLs in one array lookup.
  • the correct URL can be identified without string comparisons after decompression.
  • the correct URL is the n URL in the chunk, for a number n between 0 and (M ⁇ 1). It is computed as (CS_id-Min[CS_id]) mod M.
  • one embodiment of CS 2 includes fingerprints as a way to identify URLs This facility is important for outside applications that only reference URL by their much smaller fingerprints. Such applications abound only in existing Web-based search engines.
  • a further advantage embodied in the subject invention is that fewer URLs and links are stored for the same data set. All URLs and links that contribute to the construction of the Databases are stored in the data structures. Only URLs that are sources in the input files, are specified in an input list, or otherwise defined as important, because, for example, they have indegree greater than a predetermined value are stored. Furthermore, only links to a stored URL are stored. This optimization greatly reduces the number of URLs and links stored. Approximately 40% as many URLs and about 75% as many links as are stored in CS 1 , with a corresponding reduction in the RAM required to avoid I/O.
  • the Host Table design in CS 1 required augmentation in CS 2 in order to accommodate URL partitioning.
  • the Host Table written for CS 1 assumes that all URLs on a single host are assigned consecutive CS_ids.
  • URL partitioning in accordance with the subject invention connotes a separate series of consecutive CS_ids in each partition. Therefore, the Host Table includes only the starting CS_id and number of CS_ids columns.
  • the “next” column is not necessary, because all CS_ids on a given host are consecutive in CS 1 .
  • the Host_id column was not necessary CS 1 because it is always the row number of that row, never a different row, as it often is in CS 2 .
  • CS 1 the only way to locate the correct row, and hence Host_id, for a CS_id is to perform a binary search over the Host Table rows.
  • the search requires comparing the given CS_id to the starting CS_id for the row.
  • Binary searching requires an average of log 2 N comparisons, on a table with millions of rows. Accordingly, a table with a million rows requires 20 comparisons.
  • CS 2 locating a Host_id requires one lookup in the Host Index, to identify a starting row, and then an examination of consecutive Host Table rows until the correct row is found.
  • P is an absolute upper bound on the number of rows that needs to be examined, in practice examination of fewer than three rows sufficient, because P is chosen to be much less than the average number of CS_ids in a series.
  • four Host Table rows fit in the same hardware cache line on most hardware architectures, accessing consecutive Host Table rows is fast. Note, however, that cache line size may vary among processor architectures and that a processor may have access to with multiple caches.
  • CS 1 the physical storage of the starts and links arrays is the same as the logical array design described with respect to the subject invention. That is, all link array entries are 32-bit absolute CS_ids, and all starts array entries are 32-bit offsets into the links array. It is noteworthy that the offsets correspond to 32 bit CS_ids in CS 1 , while each offset correspond to a four bit part of a CS_id in CS 2 . There is no provision for offsets into a links array with 2 32 or more entries. Stated alternatively, 2 32 is the maximum number of links that can be stored in CS 1 .
  • the storage requirement for the link database in CS 1 is 4*nURLs bytes for the starts arrays, plus 4*nLinks bytes for the links array, for each of the outlinks and inlinks.
  • the compression of the starts arrays reduces their size to nURLs*((4+2Q)/Q) for the starts entries in Partition 1 , and nURLs*((4+Q)/Q) for the starts entries in Partition 2 .
  • Q 16
  • the size of the average starts entry is reduced to 1.5 bytes from 4 bytes.
  • starts arrays for outlinks and inlinks are stored as a single array, where each array entry had two fields: one for outlinks and one for inlinks. Separating the arrays obviates the need to read both starts arrays in order to use only one. For example, the eigenrank process uses only the inlinks starts and links during most of its computation.
  • the compression of the links arrays in the subject invention reduces their size.
  • the average outlinks links entry is 2.16 bytes and the average inlinks entry is 1.23 bytes. Four bytes are required in CS 1 .
  • the inlinks entries compress more than the outlinks entries because they are sorted. As a result, there is no need to use a sign bit, and, more importantly, their delta values are much smaller.
  • the URL partitioning by number of outlinks and inlinks signifies that the most frequently referenced CS_ids have numerically low CS_ids, thereby compressing more efficiently.

Abstract

A process for constructing a server for collecting, arranging and storing data that defines the connectivity of pages on the World Wide Web (Web). The process input is a set of compressed ASCII links files, wherein each links file is a series of source URLs and corresponding destination URLs. A temporary URLs_info Table is created and initialized. The links files and URLs metadata are read. Buffers of unique URLs are sorted and written from the links files into URL runs. An ID Index is created from the URL_info table. CS_ids are assigned to URLs and written to the ID Index. Both a compressed URL data structure and a URL Index are created. A Host Table is created. URL fingerprints are converted to CS_ids, and preliminary outstarts to CS_ids and preliminary outstarts and outlinks tables are created. Compressed outstarts and outlinks tables are created from the preliminary tables. Subsequently, compressed instarts and inlinks tables are created based on the outstarts and outlinks tables.

Description

INCORPORATION BY REFERENCE
By this reference, the following U.S. Patents and Patent Application are hereby incorporated into this Patent Application, in entirety and for all purposes:
U.S. Pat. No. 6,598,051 entitled “WEB PAGE CONNECTIVITY SERVER,” by Janet L. Wiener, Raymond P. Stata, and Michael Burrows.
U.S. Pat. No. 6,073,135, entitled “CONNECTIVITY SERVER FOR LOCATING LINKAGE INFORMATION BETWEEN WEB PAGES,” to Andrel Z. Broder, Michael Burrows, Monika H. Henzinger, Sanjay Ghemawat, Puneet Kumar, Suresh Venkatasubramanian;
U.S. Pat. No. 5,864,863, entitled “METHOD FOR PARSING, INDEXING AND SEARCHING WORLD-WIDE-WEB PAGES,” to Michael Burrows;
U.S. Pat. No. 5,832,500, entitled “METHOD FOR SEARCHING AN INDEX,” to Michael Burrows; and
U.S. Pat. No. 5,809,502, entitled “OBJECT-ORIENTED INTERFACE FOR AN INDEX,” to Michael Burrows.
BACKGROUND OF THE INVENTION
1. Field of the Invention
The invention relates to techniques for collecting, arranging, and coordinating information pertaining to the connectivity of Web pages and, more particularly, to the construction of a connectivity server, including a data structure incorporating a URL Database, a Host Database and a Link Database, the connectivity server for facilitating efficient and effective representation and navigation of Web pages.
2. Description of the Related Art
The World Wide Web (Web) is constituted from the entire set of interlinked hypertext documents that reside on Hypertext Transfer Protocol (HTTP) servers that are globally connected by Internet. Documents resident on the Web (Web pages) are generally written in a mark-up language such as HTML (Hypertext Markup Language) and are identified by URLs (Uniform Resource Locators). In general, URLs correspond to addresses of Internet resources and serve to specify the protocol to be used in accessing a resource, as well as the particular server and pathname by which the resource may be accessed.
Files are transmitted from a Web server to an end user under HTTP. Codes, called tags, that are embedded in an HTML document associate particular words and images in the document with URLs, so that an end user can access other Web resources, regardless where physically located, upon the activation of a key or mouse.
Users of client computers use Web browsers to locate Web pages that, as indicated above, are identified by URLs. Specialized servers, called search engines, maintain indices of the contents of Web pages. The browsers may be used to pose textual queries. In response, the search engines return result sets of URLs that identify Web pages that satisfy the queries. Usually, the result sets are rank ordered according to relevance.
In this regard, information related to the connectivity of Web pages, such as the number of links to or from a page, can be used as a tie-breaking mechanism in ranking the result sets or as an input in deciding the relative importance of result pages.
The URL names of the result sets may then be used to retrieve the identified Web pages, a s well as other pages connected by “hot links.”
However, many users are interested in more than merely the content of the Web pages. Specifically, users may be interested in the manner in which Web pages are interconnected. In other words, users may be interested in exploring the connectivity information embedded within the Web for practical, commercial, or other reasons.
The connectivity information provided by search engines exists largely as a byproduct of their paramount function. Although an unsophisticated user may easily follow a trail between connected Web pages, the extraction of global view of connectivity quickly becomes tedious. The connectivity representation in the search engines serves a single purpose: to provide answers to queries. However, determination of all pages that are, for example, two links removed from a particular page may require thousands of queries, and a substantial amount of processing by the user. Without a separate representation of the Web, it is very difficult to provide linkage information. In fact, most search engines fail to provide access to any type of connectivity information.
This is a significant drawback, because linkage information between Web pages is a valuable resource for Web visualization and page ranking. Several ongoing research projects use such information. Most connectivity information is obtained from ad-hoc Web “crawlers” that build relatively small databases of local linkage information.
A database may be constructed on the fly or statically. When constructed on the fly, each new page is parsed as it is accessed in order to identify links. The linked neighboring pages are retrieved until the required connectivity information is gathered. When statically constructed, a connectivity database is essentially rebuilt from scratch whenever updates are required. For example, the service designated Linalert™ provided by Lycos uses static databases specifically designed to offer linkage information for particular Web sites. Earlier implementations of both on-the-fly and static approaches have proven inefficient and clumsy to use, and do not comprehend to the entire Web and a large number of clients. Consequently, prior-art implementations of connectivity databases generally perform poorly and/or are limited in scope.
Accordingly, U.S. Pat. No. 6,073,135, entitled “Connectivity Server for Locating Linkage Information Between Web Pages,” hereby incorporated by reference, is directed to a server that enables convenient and efficient representation and navigation of connectivity information of Web pages. The server described therein (hereinafter “CS1”) maintains accurate linkage information for a significant portion of the Web and supports a large number of client users that desire numerous variants of connectivity information. In addition, the system dynamically updates the connectivity information so that the linkage information is current.
FIGS. 1 through 9 of the Drawings depict the implementation of CS1 in accordance with U.S. Pat. No. 6,073,135.
As depicted in FIG. 1, the Web is shown to comprise a widely distributed network of computers 100 that include numerous client computers 110 connected to server computers 120 by a network 130. Generally, servers 120 provide information, products, and services to users of the clients 110.
Client computers 110 may be personal computers (PCs), workstations, or laptops. Typically, clients are equipped with input/output devices 115, such as a keyboard, mouse, and display device 115. Software in the form of a Web browser 111 interacts with devices 115 to provide an interface between the user and the Web.
The server computers 120 are usually larger computer systems, although this does not always need to be so. Some of the servers, also known as “Web sites,” maintain a database (DB) 121 of Web pages 122. Each Web page 122 is identified and can be located by its URL 123. Web pages are usually formatted using HTML, which establishes links to other pages. A user is afforded the opportunity to “click” on a link within a page viewed with the browser in order to access a “pointed to” page.
Search engines, in the form of servers 140, maintain an index 141 of the contents of Web pages. Using a search engine application programming interface (API) 142, client users may locate pages having specific content of interest to the users. The user specifies pages of interest to the API of the search engine 140 by composing queries that are processed by the search engine's API 142.
A specialized, “connectivity” server 150 is also provided. Connectivity server 150 maintains a connectivity database 151. Using a connectivity server API 152, users may locate pages (URLs) according to the definition of the interconnection between pages.
As shown in FIG. 2, a graph 200 is built to represent the connectivity of Web pages. In the graph 200, each node (A, . . . , G) 210 represents a Web page 122. Each edge, for example an edge (AB) 220 represent a link from one page to another, for example, with edge AB representing a link from page A to page B. The connectivity API 152, in various forms, enables client users to “explore” or navigate” graph 200 to extract connectivity information.
It is readily appreciated that the data representation of graph 200 in memory must be carefully designed to minimize memory storage requirements. Assuming the graph contains approximately 100 M Web pages with an average outdegree of seven, then the graph will have about 700 M edges. A rudimentary implementation would store two pointers per edge. Furthermore, given that the average size of a URL is about 80 bytes, the uncompressed URLs of the nodes depicted in the rudimentary a implementation will occupy about 8 Gb (Gigabytes). From another perspective, storage of 1 B (uncompressed) edges will similarly require 8 Gb of storage, even if the endpoints are susceptible of representation as 4-byte integers. Because currently, 1 B edges may typically be captured in a single week's web crawl, the demand for storage capacity quickly becomes extraordinary.
Graph 200 is built, maintained, and traversed as follows. Preferably, the input utilized in building the graph is provided by the search engine 140. However, it should be understood that the input for constructing the graph may also come from other sources.
As shown in FIG. 3, the input for constructing graph 200 is a set of URLs {URL A, . . . , URL Z} 310. URL set 310 identifies known Web pages 122. The URLs or names of the set 310 are first lexicographically sorted in module 320. Next, the sorted URLs are delta encoded in module 330 to produced a list 340. In list 340, each entry 341 is stored in as a difference (delta) between the current URL and a previous URL. Because pages maintained at the same site are likely to have fairly large prefix portion in common, storage reduction due to delta encoding is considerable. For 100 million URLs, storage may be reduced by about 70%.
For example, if the input URLs 310 are:
www.foobar.com/
www.foobar.com/gandalf.html
www.foograb.com/,
then the output, delta-encoded URLs 340 are:
0 www.foobar.com/
14 gandalf.html
7 grab.com/
More precisely, each entry 341 of the list 340 includes the following fields: a size field 342 that indicates the number of common bytes with the previous URL; a delta field 343 that stores the bytes that are different than the shared prefix, terminated by a zero byte 344; finally, a field (Node ID) 345 identifies the node that represents the corresponding page.
Delta encoding URL values comes at a price, namely an increase in the processing required to perform during an inverse translation to recover a full URL. In order to recover a complete URL, one must start with the first entry of the list 340 and linearly apply all delta values 342 until the URL under consideration is reconstructed.
This situation may be ameliorated by periodically remembering an entire URL as a checkpoint URL entry 350. The checkpoints 350 can be maintained as a separate sorted list 360 on which a binary search can be applied. Thus, once the closest preceding checkpoint URL 350 has been located, only the delta values from that point on need be applied. The cost of inverse translation can be controlled by the number of entries 350 in the checkpoint list 360. In one embodiment, a checkpoint entry may be maintained for approximately every thousand bytes of URL data in the list 340.
Referring now to FIG. 4, the edges of the graph 200 are constructed from a list of pairs 410. Each pair 420 includes the node ID of a first (URL1) 421, and a second node ID (URL2) 422 of a second page that contains a link to the first page. The pairs 420 essentially indicate the connectivity of the pages. The pairs may be obtained from a search engine 140 or from other sources.
The list 410 is sorted twice (431, 432), first according to the first node ID 421 to produce an inlist table 441, and, second, according to the second node ID 422 to produce an outlist table 442. The inlist table contains only the second node ID from each pair: the high order bit (bit 32) 450 of a list entry is set to indicate the end of a group of common connected nodes, that is a group of nodes that point to the same page P. The entry 510, described below and illustrated in FIG. 5, corresponding to P contains a field 512 that points to the beginning of the group of nodes within the inlist that point to P. The outlist table is organized in a similar way. In other words, each edge 220 of the graph 200 is represented twice to indicate pages pointing to a particular page, and to indicate pages pointed to from a particular page.
As shown in FIG. 5, graph 200 itself is maintained as an array 500. The nodes of the graph are represented by elements 510 of the array 500. Each element 510 includes three fields 511, 512 and 513. Field 511 stores a pointer (URL pointer) to the delta-encoded list 340 of FIG. 3. Fields 512 and 513 point to the corresponding respective inlist 441 and outlist 442. In other words, field 511 points to the node name, field 512 points to the incoming edges, and field 513 points to the outgoing edges.
As shown in FIG. 6, a user is able to explore the connectivity of the Web by supplying an input URL (URL in) 601. The input URL 601 is used to binary (or interpolation) search 610 the checkpoint list 360 to locate the closest delta checkpoint 350. Subsequently, delta values 343 are applied in a Delta Scan module 620 until a full URL 621 equal to the input 601 is recovered. The associated node ID 345 is used to index, via module 630, the array 500. Indexing the array 500 locates a start node 631 from which connectivity can be explored in step 640. Graph 200 can be navigated to the depth desired using the inlist table 441 and outlist table 442, thereby producing an output list of URLs (URLs out) 609.
FIG. 7 depicts in greater detail a data structure (ID-to-URL Array) 511 that is used to recover a full URL from a node ID. In the array 511, one entry exists for each node 210 in graph 200. Entries 701 point to the nearest checkpoint URL 350 for each node in the checkpoint list 360. Subsequent delta values 343 are applied until an entry with a matching node ID 345 is found. At this pint, the full URL 709 has been recovered.
The above-referenced process is illustrated in FIG. 8. The input to the process is one of the output URLs 609 of FIG. 6. The node ID is used as an index in the ID-to-URL table 511 to determine a closest checkpoint 350. Delta values are decoded until the matching node ID in field 345 is found, at which point the full URL 709 has been recovered.
The overall structure of the connectivity server 150 is shown in FIG. 9. The connectivity data structures 151 may, in one embodiment, be stored in a hard disk, or disk array, associated with server 150. The connectivity structures 151 include the delta encoded list 340 of URLs, including checkpoints, as well as inlist and outlist tables 441 and 442, the node ID array 500, and the ID-to-URL array 511. Connectivity processes 910 are operable to locate a starting node in the graph 200 for a given URL. The processes 910 can also navigate the graph 200 to locate connected nodes. Data structure 151 may be updated to add new nodes and edges that correspond to newly found pages and links, or to delete portions of the graph for which Web pages are no longer accessible.
Connectivity server 150 includes the following APIs. A first API 911 interfaces to the search engine 140. This interface is used to obtain the URLs of Web pages that are represented by the nodes of the graph. A Web API 912 is connected to a conventional Web HTTP server 920 to provide a World Wide Web interface 921.
In addition, a public API 913 is provided for public clients 930, and a private API 914 is provided for private clients 940. The private API 914 allows access to more efficient data structures and processes for privileged users. A user may gain access to the APIs with the browser 111 of FIG. 1.
A basic connectivity query assumes the form: “List L,” where L is the URL of a Web page. In response, the connectivity server supplies a list of all URLs pointing to Web page L, as well as all Web pages pointed to by page L.
A neighborhood query assumes the form: “List L, D,” where D specifies the degree of connectivity to be explored. Here the connectivity server's response will be a list of URLs at a distance D from page L. It should be understood that more complex queries may be composed specifying logical combinations of URLs and distances. A private query allows users to pose queries in an internal format of the connectivity server; and the server's response may include more detailed information, such as names of the servers storing the connected pages.
As described above, the connectivity server provides linkage information for a significant portion of the Web. The information can be used by applications that rank Web pages according to their connectivity. For instance, pages with many connections may be considered authoritative pages, or “hubs.” The information can be used to build Web visualization and navigation tools, and can be used in conjunction with search engine results to lead users to portions of the Web that store content that may be of interest. In addition, the technique may be used to optimize the design and implementation of Web crawlers based on statistics derived from the in degrees and out degrees of nodes.
In one embodiment, the connectivity server described above may be implemented on Digital Equipment Corporation 300 MHz Alpha processors configured with 4 GB of RAM and a 48 GB disk. Graph 200 included 230 M nodes with about 360 M edges. The average storage space for each URL is approximately 25 bytes for a total of 5.6 Gigabytes for the delta compressed URL database. The connectivity server responds to user queries at the rate of about one URL every 0.1 millisecond.
Although the connectivity server described above may fairly be viewed as a substantial advance in the techniques formerly available for extracting connectivity information related to Web pages, there remain opportunities for further significant advances that are addressed by the subject invention. For example, further compression of both URLs and links results in the ability to store appreciably more information in the same quantity of physical storage media. In addition, the subject invention enables connectivity information to be extracted more rapidly than heretofore, thereby facilitating applications such as the static ranking of pages (eigenranks), query precomputation, mirror site detection and related-page identification.
SUMMARY OF THE INVENTION
The above and other features, capabilities and advantages are realized in one aspect of the invention by a process for constructing a server that collects, arranges and stores data that defines the connectivity of Web pages. In one embodiment, the salient process steps include:
(a) reading a set of links files;
(b) creating a temporary URLs_info Table;
(c) creating an ID Index from the URLs_info Table;
(d) assigning CS_ids to URLs;
(e) writing the CS_ids to the ID Index;
(f) compressing URLs;
(g) creating a URL Index;
(h) creating a Host Table;
(i) converting URL fingerprints o CS_ids;
(j) creating OUTstarts and OUTlinks tables; and
(k) creating INstarts and INlinks tables.
Another aspect of the invention inheres in a process for constructing a URL Database for a connectivity server. The process comprises the steps:
(a) reading a set of links files, each of which contains a series of source URLs;
(b) calculating a fingerprint for each URL;
(c) creating a temporary URL_info Table in the form of a hash table having as keys the most significant N bits of a URL fingerprint;
(d) creating an ID Index from the URLs_info Table;
(e) assigning CS_ids to URLs;
(f) routing the CS_ids to URLs;
(g) creating a URL Index; and
(h) converting URL fingerprints to CS_ids.
BRIEF DESCRIPTION OF THE DRAWINGS
FIG. 1 is a block diagram of a distributed computer network in which various clients 110 are coupled through the Internet to various servers, including an earlier-generation connectivity server 150, and to a search engine 142.
FIG. 2 is a graphical representation of the connectivity of a number of Web pages, corresponding to information that is stored in a connectivity server.
FIG. 3 is a flow diagram of the process employed by CS1 to encode names of Web pages (URLs).
FIG. 4 is a flow graph depicting a process used by CS1 to generate an Inlist Table 441 and an Outlist Table 442, as those tables are constructed by CS1.
FIG. 5 is a block diagram of an array embodied in CS1 that constitutes a compilation and an arrangement of connectivity information.
FIG. 6 is a flow diagram of process perform by CS1 in locating a node in an interconnected set of web pages, as exemplified in FIG. 2, based on use of the array depicted in FIG. 5.
FIG. 7 is a flow diagram of a process used in CS1 for translating node identifications to a URL of a Web page.
FIG. 8 is a block diagram of CS1.
FIG. 9 is a block diagram of an exemplary embodiment of the operating environment of a connectivity server, including the connectivity server described herein.
FIG. 10 is a system block diagram depicting a connectivity server that includes a URL Database, a Host Database, and a Link Database.
FIG. 11 is a graphical depiction of the prefix compression performed on URLs stored in the URL Database of the subject invention.
FIG. 12 is a graphical depiction of the manner in which the ID Index Array maps into compressed URLs in accordance with the subject invention.
FIG. 13 is a representation of the ID Index as a hash table that maps URL fingerprints to CS_ids.
FIG. 14 depicts a Host Table in which consecutively numbered Host_ids are defined by the starting CS_id in a series on the same host. The Host Table is shown to also store the number of CS_ids in the series, the Host_id for the series, and the row number of the next highest row in the Host Table with the same Host_id.
FIG. 15 graphically depicts the manner in which the Host Index and Host Table are used to find a Host_id for a given CS_id.
FIG. 16 illustrates the logical structure of the outstarts array and the outlinks array, before compression.
FIG. 17 illustrates the stored delta values for the outlinks illustrated in FIG. 16.
FIG. 18 illustrates the sizes of bit-compressed delta values in the outlinks array.
FIG. 19 depicts the delta outstarts corresponding to FIG. 18, when each starts array is compressed by division into groups of, for example, four entities.
DETAILED DESCRIPTION
For a thorough understanding of the subject invention, reference is made to the following Description, including the appended Claims, in connection with the above-described Drawings.
As depicted in FIG. 10, one embodiment of the invention comprises a connectivity server that includes a URL database, a Host database and a Link database. The URL database stores URLs; the Host database stores information about the URLs; and the Link database stores information about links between the URLs. The connectivity server stores the information, in specialized data structures that will be described in detail below, and controls access to the URL, Host and Link databases. In one embodiment, all the databases are stored in RAM resident on a single processor. In this form, access to the URLs and links is fact enough to enable applications that touch every link, even multiple times, to execute, in real time, in minutes or hours.
For example, on a processor such the AlphaServer 4100 (available from Compaq Computer Corporation; Houston, Tex.) with 8 Gb RAM, 1.5 B links may be stored in a memory space 5.9 Gb. Access to each link requires only 0.15 microseconds. Consequently, one iteration that over all the stored links can be accomplished in less than four minutes. Similarly, 200 M URLs may be stored in less than 4 Gb, and each URL may be retrieved in less than 85 microseconds. Applications that benefit from this capability include static ranking of pages (eigenranks), query pre-computation, mirror-site detection, and related-page identification. In a manner to be described below, the connectivity server is characterized by data structures that implement data compression effective to store the crawled portion of the Web in RAM: that is, 300 M URLs and 2 B links in approximately 13 Gb.
I. System Design
The design and operation of the subject Connectivity Server (hereinafter “CS2”), including a URL database, HOST database, and LINK database are described, seriatim, below.
1.0 URL Database
1.1 Functionality
The URL Database stores all URLs and associates with each URL a 64-bit fingerprint (FP) and a unique 32-bit internal identifier (CS_id).
The URL Database includes an interface that translates between pairs of associated URLs, FPs and CS_ids. That is, the interface functions, inter alia, as a URL-to-FP, URL-to-CS_id, FP-to-URL, FP-to-CS_id, CS_id-to-URL, and CS_id-to-FP translator.
The URL index is an index from compressed URLs to CS_ids, and the CS_id index is an index from FPs to CS_ids. URL-to-FP translation may be accomplished through a deterministic mathematical function. In one embodiment, the function is a hash function that returns a unique 64-bit integer corresponding to each unique URL string, for up to 232 strings. Many such functions are known to those skilled in the art, and all such functions that have the requisite uniqueness characteristics are candidates for use in the context of the subject invention. In addition, similar mathematical functions exist to return the maximum and minimum CS_ids. CS_ids are consecutive between the minimum and the maximum.
1.2. Partitioning
In one embodiment, URLs are stored in the URL database, which is divided into N partitions of unequal size. The allocation of a URL to a partition is based on the “importance” of the URL. Specifically, URLs in Partition 0 are considered most important. In one embodiment, there are three partitions, that is N=3. The “importance” of a URL is commensurate with the indegree and the outdegree of the URL. The outdegree of a URL is equal to the number of links emanating from the URL. Conversely, the indegree of a URL is equal to the number of links pointing to the URL. In one embodiment, Partition 0 is occupied by URLs with indegree or outdegree greater than or equal to 255. Partition 1 is occupied by URLs with indegree or outdegree greater than or equal to 16, but less than 255; and Partition 2 is occupied by with the remaining URLs. It has been empirically determined that the URL population, as a percentage of all URLs, for Partition 0, Partition 1, and Partition 2 is, respectively, approximately 0.4%, 19% and 81%.
Within each partition, URLs are sorted lexicographically, and CS_ids are assigned to the URLs sequentially, starting with Min(CS_id) in Partition 0 and Max(CS_id+1) for Partition (N−1), that is, Partition 2 in the instant embodiment. Therefore, within each partition, consecutive CS_ids correspond lexicographically to similar URLs. In particular, URLs share a common prefix.
1.3. URL Compression
The compressed URL data structure stores the URLs in chunks of M URLs. Each chunk of URLs is compressed separately. First, the URL scheme “http://” is discarded, thereby reducing the length of the URL by seven characters. Second, a prefix compression is applied. The prefix compression writes a 0 followed by the entire first URL. For each subsequent URL, URLi, where i≧1, the prefix compression writes a one-byte integer having a value between 0 and 255. The integer represents the length of the common prefix shared by URLi and URLi−1, followed by the remainder of URLi, after the common prefix. In one embodiment, the prefix compression reduces the average URL length about 67%, from 44 to 14.5 bytes. FIG. 11 shows seven consecutive URLs in Partition 0, before and after the prefix compression. Third, a second compression routine is applied to the prefix-compressed chunk of URLs. On an exemplary data set, the second compression routine is performed in accordance with the ZLIB Compressed Data Format Specification, Version 1.1.3 The second data compression reduces the average length of URLs another 37%, to 9.2 bytes per URL. Chunks of doubly-compressed URLs with consecutive CS_ids are stored in contiguous bytes in the URLs files. A separate file is supported for each partition.
1.4. URL Index
The URL Index is an array with one entry per chunk of M URLs. Each entry logically points to a compressed chunk of M URLs by containing the byte offset of that chunk from the start of the compressed URLs file. FIG. 12 shows the URL Index for the URLs in FIG. 11. In one implementation, the URL Index is an array of 64-bit integers. The array indexes are a function of the CS_ids contained in the chunk, M, and the Min[CS_id] for that partition. In accordance with this embodiment, the URL with CS_id=i may be identified by locating the chunk pointed to by URL index ((i-Min[CS_id])/M]. The URL Index is written separately for each partition.
1.5. ID Index
The ID Index is a hash table that maps from fingerprints to CS_ids. The hash table has a multiple of 224 buckets, and the hash key is the high (most significant) 24 bits of the fingerprint. Only the remaining 40 bits of the fingerprint and the CS_id are stored in each entry in the hash table. Each primary bucket of the hash table is 32 bytes long and contains three entries (at most), a count of the number of entries in the bucket, and a logical pointer into an overflow table. The overflow table is an array of entries sorted by bucket. The pointer is the array index of the first overflow entry for that bucket. All overflow entries derived from a single bucket are contiguous. Although entries are logically stored one after the next, physically, groups of (3 in the primary bucket, 4 in the overflow) entries are stored together: first all of their CS_ids, then the low 32 bits of all of their fingerprints, then the remaining eight bits of the fingerprints. This approach minimizes, or even obviates, the space wasted by data alignment. FIG. 13 depicts a portion of an exemplary bucket.
To find the CS_id corresponding to a fingerprint, the most significant 24 bits are used to choose a bucket, and then the entries in the bucket are searched sequentially to find a match. If there are greater than three entries, then the count is used to limit the number of entries searched in overflow. Within each bucket, the entries are sorted by decreasing indegree. In this manner, it is anticipated that the most frequently accessed entries will be found fastest.
2.0 Host Database
2.1 Host Functionality
The host database associates a unique 32-bit internal host identifier, Host_id, with each distinct hostname in the URL database. A hostname is the portion of the URL after “http://” and before the next “/”. The hostname may include a port number. Every URL and CS_id in the database maps to exactly one Host_id. The Host Database interface includes functions that accept a CS-id and return a Host_id and that accept a Host_id and return either the number of URLs on that host or the CS_id of (at most, N) URLs on that host, for a user-defined N. Host_ids are not densely packed. However, the Host database interface also has the capability to return the first Host_id and the “next” Host_id.
2.2 Host Table
The Host Table data structure comprises four columns of four bytes each. The columns include the starting CS_id of a consecutive series of CS_ids on the same host, the number of CS_ids in the series, the Host_id for the series, and the row number of the next highest table row with the same Host_id. A Host_id is the row number of the first table row with CS_ids on that host. The table rows are sorted by starting CS_ids in ascending order. FIG. 14 shows a Host Table. Note that Row 0 is always empty.
In one embodiment, the variable P is a predetermined integer chosen to effect a balance between the size of the Host Index and the number of Host Table entries that might be searched after a single Host Index lookup. The Host Index has nURLs/P entries. The number of Host Table entries to be searched after a lookup is nURLs/(nhosts*P), where, in at least one dataset the quantity (nURLs/nhosts) is equal to approximately 50.
2.3 Host Index
The host database also includes a Host Index. The Host Index is an array of nURLs/P entries. Each array entry i contains the largest host table row number whose starting CS_id is less than or equal to (i*P). To find the Host_id for a given CS_id, the connectivity server requires one lookup in the Host Index to find a row. Then the Host Table is scanned sequentially starting from that row number until the correct row is found. FIG. 15 shows a Host Index and Host Table with P=4.
3.0 Link Database
3.1 Link Database Functionality
The Link Database stores all links. Each link extends between a source URL, A, and a destination URL, B. A link is stored in both directions, that is, as an outlink of A and as an inlink of B. The Link Database interface operates to retrieve, for a given CS_id, the number of associated outlinks or inlinks, as well as the CS_id of a user-specified number of outlinks or inlinks. When retrieving outlink CS_ids or inlink CS_ids, the Link Database interface provides the option of retrieving either the Host_id of each CS_id, or a Boolean value that indicates whether the respective outlink or inlink resides on the same host as does the input CS_id.
3.2 Link Database Structure
Logically, the outlinks are stored in two arrays. An array of “starts” is indexed by source CS_id, and contains elements are offsets in an array of “links”. The elements of links array are the destination CS_ids. The outlinks of CS_id A are stored in links[starts[A]] to links [starts[A+1]−1]. The outlinks of a given CS_id are stored in the same order as they appeared on a page, after duplicate links are removed. Logically, inlinks are stored the same way as outlinks. However, the inlinks of a given CS_id are stored in sorted ascending order by inlink CS_id. FIG. 16 shows the logical structure of the outstarts and outlinks arrays, before compression.
3.3 Links Array Compression
Physically, both the starts and links arrays are compressed and divided by partition. The outlinks link array entries are first rewritten as delta values. The first destination CS_id B in links [starts[A]] has a delta value of B-A. The remaining destination CS_ids in links [i] have delta values of links[i]-links[i−1]. Delta values fall in the range [CS_idminid-CS_id_maxid] to [CS_id_maxid—CS_id_minid]. That is, some delta values may be negative numbers, although all CS_ids are positive. Therefore, the maximum number of bits needed to store a delta value is 33, not 32, assuming that only one bit is used to store the sign. The delta values are then compressed using a fixed-bit compression scheme, so that they use a variable number of bits, dependent on the delta value. FIG. 17 shows the delta values for the outlinks in FIG. 16.
In one embodiment, the bit compression scheme stores values in multiples of four bits. Each four-bit multiple contains a stop bit and three data bits. For each value stored in 4 N bits, the first (N−1) stop bits are 0 and the Nth stop bit is 1. The 3 N data bits store the delta value. As a result, small numbers can be stored in a small number of bits. Each value is first encoded using a sign and magnitude scheme. The low (least significant) bit is the sign, and the remaining bits are the magnitude or absolute value. The value is then divided into groups of three bits, and the stop bits are added. The maximum size of a bit-compressed delta value is 33 data bits, plus 11 stop bits, represented in 11 four-bit quantities. FIG. 18 shows the sizes of the bit-compressed delta values for the outlinks in FIG. 16.
The inlinks link array is similar to the outlinks link array and stores the source CS_ids A that have links to a given destination CS_id B. However, since inlinks are stored in ascending CS_id order, only the first delta value for a given CS_id B can be negative. In one embodiment, therefore, no sign bit is stored for the remaining source delta values.
A separate inlinks and outlinks link array is stored for each URL/CS_id partition. The starts offsets to compressed link arrays contain offsets of four-bit quantities. Therefore, each array is further subdivided if it exceeds (4)(232) bits, so that all compressed values begin at an offset less than 232 from the start of the array.
3.4 Starts Array Compression
In one embodiment, there is provided one starts array corresponding to each link array. Each starts array entry is an array offset that can be represented in 32 bits. Each starts array is compressed by dividing the array into groups of Q entries. Because in Partition 0, there are an unlimited number of both outlinks and inlinks, there is no maximum difference between successive offsets. No compression is imparted to the starts arrays. Inasmuch as the starts arrays for the outlinks and inlinks are identical, hereinafter in this Description only the outlinks starts array will be referred to.
In Partition 1, there are at most 254 outlinks or inlinks. Since each outlink is stored in at most 11 four-bit quantities, the maximum difference between two consecutive offsets is 254*11=2794, which can be stored in 16 bits.
In partition 2, there are at most 15 outlinks or inlinks. Since (15*11)=165, which is less than 255, the delta offsets can be stored in eight bits. The scheme for Partition 2 is otherwise identical to the scheme for partition 1. FIG. 19 shows the delta outstarts for FIG. 18 when Q=4.
II. Database Construction
A set of compressed ASCII links files forms the input to the construction methodology (algorithm) that is used to compile the CS2 databases. In each links file there exists a series of source URLs. Each source URL is followed by a (possibly empty) list of corresponding destination URLs. The links files are provided filenames that include timestamps, so that a lexicographic sort of the filenames yields the files in chronological order. The input to the construction algorithm may optionally include an ASCII list of URLs that may, for any one of a number of reasons, be deemed “special”. For example, URLs in AltaVista's current index are deemed special URLs.
The output of the construction process constitutes the CS2 data structures, as have been described above. Those data structures store all URLs that appear (i) as a source URL in the input files, (ii) as a destination URL in the input files at least K times, where K is an integer greater than 0, or (iii) appear as a destination URL at least once and are in the special URLs file. All other destination URLs in the input files are discarded or ignored (Note, however, in order to include all destination URLs that appear in the input file, it is necessary only to set K=1.) In addition, all links between two stored URLs are stored. Links to a destination URL that is discarded are similarly discarded.
The build algorithm comprises several Phases, which are described seriatim below. In each Phase, effort is directed toward building at least one, but sometimes more than one, data structure. Temporary data structures that are created in the construction of permanent data structures are also described below.
3.1 Phase One
In the Phase One, a temporary URL_info data structure is created. This data structure assumes the form of a hash table whose keys are the most significant 24 bits of a 64-bit URL fingerprint. Each record in the URL_info Table contains the remaining 40 bits of one unique URL fingerprint, plus associated metadata. The associated metadata includes: the indegree of the URL; the outdegree of the URL; and Boolean values that indicate (1) whether the URL has been a source URL in an input file, (2) whether the URL appears at all in the input files, and (3) whether the URL is in the special file. As an alternative, an outdegree may be represented by a pair of Boolean values that indicate an outdegree magnitude greater than or equal to 16 or an outdegree magnitude greater than or equal to 255. The hash table has a multiple of 224 buckets. In the current implementation, each bucket is 64 bytes deep and has storage for eight entries and a pointer to overflow. The URL_info Table is initially empty.
If a special URL file is part of the input, it is read at the end of Phase One. The fingerprint for each URL in the file is stored in the URL_info Table.
Providing a special URL file as input is an enhancement in CS2. CS1 does not qualify URLs included in a build. In addition, the maintenance of statistics on URLs as the URLs are read in the input files is new in CS2. These statistics may then be the predicate for prospective decisions, such as which URLs are to be retained and which URLs are most “important.”
3.2 Phase Two
In Phase Two, the links files are read, backwards and in reverse chronological order. As a result, if a source URL appears multiple times (representing, for example, multiple crawls of the same page), then the initial reading of a URL in the links files corresponds to the most recent crawl. It, and its destination URLs, are ignored all other times. Although the files are processed sequentially to preserve strict reverse chronological order, URLs are decompressed in advance by a separate, parallel thread and are written to a buffer for processing.
The fingerprint of each URL is computed and added to the URLs_info Table, assuming it is not already present. For each source URL, its outdegree is stored and the Boolean values corresponding to “appears” and “source” are set to TRUE. For each destination URL, its indegree is incremented by one, and the Boolean “appears” is set to TRUE. In addition, the first time a URL is either a source or has indegree==K and is not a “special” URL, it is written to a URL-sort buffer. URLs that are written because their indegree==K are also written to an “K-URLs” file. The “K-URLs” file identifies potentially important URLs that may not have been crawled.
Destination URLs are counted only once per source URL, and then only if the destination URLs are different from the source URL. For each source URL, its fingerprint, its outdegree, and a list of the destination URL fingerprints are written to the fingerprint-links file. The fingerprint-links file is essentially a copy of the links files, but without duplicates, without compression, and with URLs already converted to fingerprints. It consumes approximately half the number of bytes consumed by the compressed links files and, therefore, requires correspondingly less I/O to read in Phase Six. More importantly, the fingerprint-links file does not require decompression to read in Phase Six, therefore, conserving hours of CPU time.
The URL_sort buffers are a set of buffers of URLs. At any given time, URLs are written to one buffer. When that buffer is full, it sorted and then written to disk by a separate, parallel thread. The buffer is then empty. Each full, sorted buffer that is written to disk constitutes a “run”. As a run is written to hard disk, other URLs are written to a different buffer. In one implementation, there are four buffers. The buffers consume all remaining available storage capacity after storage has been allocated to the URLs_info table.
The input links files are compressed with gzip. In CS1, the files are decompressed by invoking gzip as a system call through a pipe. This method creates a separate process for each call to gzip. In CS2, the files are decompressed using zlib library functions directly into a buffer in the same process. That is to say, decompression is performed by a separate thread.
In CS1 the links files are read in chronological order. Consequently, if a URL appears as a source URL twice, then the two sets of outlinks are merged. However, the most likely reason for a duplicate URL appearance is that the URL was crawled twice. It is preferable to retain only the more recent set of destination URLs. In CS2, the links files are read in reverse chronological order, and bookkeeping is simplified by retaining only the most recent copy of a page, that is, the copy read first.
More sophisticated sorting of URLs in CS2 vastly reduces the disk space and processing time required to sort. In CS1, the set of URLs required to be sorted includes each URL, as many times as a URL appears in the links files. In CS2, a URL is included at most once, since each URL in the links files is “remembered” in the URLs_info Table. A URL is not included at all if it is considered “junk” and is not included in the URL Database. About 60% of the distinct URLs in the links files are considered junk. In CS1, all sorting is done by the Unix utility sort, in a phase separate from writing the URLs. Using Unix sort requires two copies of the URLs files, and hence twice as much disk space. In CS2, most of the sorting is done before the URLs are written at all, by a C function that is faster and sorts in place, so that no extra disk space or memory is required. In addition, the sorting is done concurrently with reading the links files.
3.3 Phase Three
In Phase Three, the ID Index is created and initialized from the URLs_info Table, with all the fingerprints the Index will contain. A fingerprint is copied from the URLs_info Table if it has a true “source” Boolean or it is both “special” and “appears,” or it “appears” and has indegree >=K. In the slot for a CS_id, which has not yet been assigned, the partition number for the CS_id is stored. The partition is based on the URL fingerprint's indegree and outdegree, which are known. Therefore, the URLs_info Table is not needed later to determine the partition.
Since the URLs_info Table and ID Index are hash tables with the same number of buckets and the same hash function, the buckets can be copied from the URLs_info Table in sequential order and written to the ID Index in sequential order. Therefore, it is not necessary that the ID Index reside in memory as it is being created.
During the creation of the ID Index, a count of the number of URLs in each partition is maintained. Subsequent to Phase Three, the URLs_info Table is no longer needed. The counts are used to allocate the CS_ids in each partition.
As created, the URL Database contains only URLs from the links files that either are source URLs, are in the special URLs file, or appear as destination URLs at least K times. In CS1, all URLs in the links files were included. This filter implemented in CS2 reduces the number of URLs in the URL Database by 60%, the size of the URL Database by over 60%, and the instarts and outstarts tables by almost 60%.
When entries in the ID Index are created, the partition number for the to-be-assigned CS_id is stored in the space for a CS_id. Therefore, the URLs_info table is not needed in Phase Three. It is noteworthy that no URLs_info Table is available in CS1.
3.4 Phase Four
In Phase Four, the sorted runs of URLs are merged. For each merged URL, its fingerprint is computed and its partition is retrieved from the ID Index. The URL is assigned the next lowest CS_id in its partition, and the ID Index is updated. The URL is then is added to a URL partition. In each partition, after each M URLs are added, the chunk of M URLs is compressed and written to disk and a new URL Index entry is created.
In addition, during the merge, a preliminary Host Table is created. The preliminary Host Table has one 16-byte entry for each eventual Host Table entry. Each entry contains the starting CS_id of a series, the number of CS_ids in the series, and the HostFP. For each merged URL, a HostFP (fingerprint of the host and port number portion of the URL) is computed. If the HostFP is different from the previous HostFP for that partition, then a new preliminary Host Table entry is created for the previous HostFP. Merging of the sorted runs represents the last sorting step.
Merging is accomplished concurrently with compression and writing the URL data structures to disk. The preliminary Host Table is created concurrently with the final step of the sorting URLs.
3.5 Phase Five
In Phase Five, the (final) Host Table is created from the preliminary Host Table. First, the preliminary Host Table is sorted by CS_id. Then its entries are copied to the Host Table, leaving the Host ID and “next” columns blank. An index on the preliminary Host Table is created and is then sorted by the preliminary Host entry HostFP. The sorted index is then used to identify the Host Table entries with the same HostFP. That is, it is used to fill in the Host ID and “next” columns of the Host Table.
3.6 Phase Six
In Phase Six, the fingerprint-links file is read. Each fingerprint is converted to a CS_id. For each source URL, the set of destination URLs may now be pruned to include only those URLs that are stored in the URL database. Then the set of destination CS_ids is compressed and copied into the next available offset in the preliminary Outlinks Table. The preliminary Outlinks Table contains only compressed destination CS_ids. An entry is made for the source URL in preliminary Outstarts Table that contains the source CS_id, the compressed length of the destination CS_ids, and an offset into the preliminary Outlinks Table. In addition, a histogram of the number of inlinks for each CS_id is created. As each destination CS-id is read, the count of its inlinks is incremented.
The links files are decompressed and read only once. Rather than reading the links files a second time to extract the link information, during the first read the data files are rewritten with fingerprints instead of URLs and without gzip compression. This is achieved in approximately half the disk space of the original gzip'd ASCII files. This optimization saves hours of decompression and allows the fast conversion from fingerprints to CS_ids, rather than the much slower compression from URLs to CS_ids.
In CS2, the preliminary outlinks data is compressed when it is written, so it is smaller and faster to write and read. That is, the data is compressed to about 1.5 bytes per link. In CS1, the preliminary outlinks contains uncompressed (that is, about eight bytes per link) pairs of source and destination CS_ids.
The indegree histogram is created while reading the fingerprint-links files, rather than requiring a separate pass over the outlinks. No indegree histogram is available in CS1.
3.7 Phase Seven
In Phase Seven, the preliminary Outstarts Table and the preliminary Outlinks Table are converted to the outstarts and outlinks data structures. The preliminary Outstarts Table is sorted by CS_id. The Outstarts and Outlinks Tables are then created sequentially and written to disk as they are created. For each CS_id, the Outstarts Table entry compresses and stores the next available offset in the Outlinks Table. If there is an entry for that CS_id in the preliminary Outstarts Table, then the compressed links are copied to the next available offset in the Outlinks Table, and the next available offset is incremented. Different outstarts and outlinks files are created for each partition. In addition, whenever the next available offset exceeds 232, a new pair of files is created and the next available offset is reset to zero.
In CS1, every pair of source and destination CS_ids must be sorted in order to write the Outstarts Table. Because the entire Outstarts Table includes a number of links to large to be stored in available memory, the construction algorithm breaks. In CS2, only the preliminary Outstarts Table must be sorted. Because the preliminary Outstarts Table contains at most one entry per CS_id (if the CS-id has any outlinks) rather than an entry derived from each link, the preliminary Outstarts Table in CS2 is easily accommodated by available memory.
3.8 Phase Eight
In Phase Eight, the instarts and inlinks data structures are created from the (inverse) link information in outstarts and outlinks. Each partition is processed separately. First, storage is allocated for uncompressed instarts and inlinks. Then, the indegree histogram that had been created in Phase 6 is scanned, and each instart is initialized for exactly the number of inlinks indicated by the histogram.
Then the entire Outstarts and Outlinks Tables are scanned in CS_id order. For each outlink from A to B, if B is in the current partition, then an inlink is added for B (to A) and instarts for B is incremented. At the end of the scan, inlinks is completely filled in, and the instarts entry for CS_id i now indicates the instarts value for CS_id i+1. The instarts entries are adjusted and then the instarts and inlinks tables are compressed and written to disk. Note that since the outlinks are scanned in ascending CS_id order, the inlinks for any given URL B are filled in ascending order. Therefore, the inlinks achieve optimal delta compression, and no sorting is required.
If not all of the inlinks for a partition can fit uncompressed in the available memory, then the indegree histogram is used to divide the partition into disjoint ranges of CS_ids. Each range is processed separately in the manner described above, except that multiple ranges may contribute to the same outstarts and outlinks file. A new pair of files is created only when the compressed offset in inlinks exceeds 232, as is the case for outlinks.
In CS1, the preliminary Inlinks Table contains each destination CS_id and destination CS-id pair, and must be sorted by source CS_id. Again, this table does not fit in memory and the algorithm breaks. In CS2, no sorting is required, and multiple passes over the in-memory outstarts and outlinks tables allow the instarts and inlinks tables to be created without any temporary data structures on disk.
III. Operational Features
1.1 URL Compression
CS1 uses only prefix compression of URLs, with a maximum prefix length of 63. In one embodiment, CS2 extends the maximum prefix length to 255, thereby alone increasing compression by about 13%, and adds a second prefix compression. Double compression of URLs yields a smaller compressed size than realizable with a single compression process. In addition, CS2 provides a shorter decompression time. Prefix decompression has been empirically determined to require only about 10 microseconds per chunk of 16 URLs. The more effective methods demonstrated decompression times of 100 microseconds or more per chunk. However, prefix decompression plus decompression by a second method of the much smaller, prefix-compressed chunk, requires only approximately 80 microseconds. The URL data structure is therefore reduced by about 45%.
1.2 Indexes Over the URL Database
In CS1, the CS_ids are stored in the URLs data structure, after each corresponding URL. Therefore, locating the CS_id for a URL requires locating the URL and URL decompression. The ID Index in CS1 locates URLs via a binary search on a set of “special” URLs. Binary searching is more time consuming than the hash table search employed by CS2. In addition, binary searching compares URLs by string comparison, which is more expensive than comparing fingerprints. Since, in one embodiment of CS2, fingerprints are only 64 bits long, they may be compared in one machine instruction. The set of special URLs used in CS1 constitute uncompressed copies of compressed URLs, and take correspondingly more space, approximately 544 bytes each, than do the five bytes per entry to store the fingerprint in CS2. After finding the correct Id Index entry in CS1, an average of 23 URLs must be decompressed until the matching URL is found. The match is similarly performed by string comparisons on each URL. In CS2, the Id Index is separate from the URLs, and locating an ID requires only computing the URL's fingerprint and comparing the fingerprint with (on average, four) other fingerprints.
The Id Index in CS1 does serve to locate URLs. However, this index is not an index from Id to URL, because the Id Index entries in CS1 are not spaced every M URLs (for any value of M, including 1). Consequently, no function of CS_id on the Id Index URLs can locate the URL with CS_id i, and the ID is not stored in the Index. Instead, CS1 overlays a URL index on the Id Index. The URL Index is an array with one entry per CS_id, indexed by CS_id, whose entries point to URL Index entries. The URL Index is thus much larger than in CS2. It is also less efficient in that it involves a second index, a binary search with URL string comparison, and an unbounded number of URL string comparisons after URL decompression. The URL index in the subject invention locates the correct chunk of M URLs in one array lookup. The correct URL can be identified without string comparisons after decompression. The correct URL is the n URL in the chunk, for a number n between 0 and (M−1). It is computed as (CS_id-Min[CS_id]) mod M.
1.3 URL Fingerprints Stored and Used as Keys
As described herein, one embodiment of CS2 includes fingerprints as a way to identify URLs This facility is important for outside applications that only reference URL by their much smaller fingerprints. Such applications abound only in existing Web-based search engines.
1.4 Junk URL and Links
A further advantage embodied in the subject invention is that fewer URLs and links are stored for the same data set. All URLs and links that contribute to the construction of the Databases are stored in the data structures. Only URLs that are sources in the input files, are specified in an input list, or otherwise defined as important, because, for example, they have indegree greater than a predetermined value are stored. Furthermore, only links to a stored URL are stored. This optimization greatly reduces the number of URLs and links stored. Approximately 40% as many URLs and about 75% as many links as are stored in CS1, with a corresponding reduction in the RAM required to avoid I/O.
2.0 Host Database
2.1 Host Table Extension for URL Partitioning
The Host Table design in CS1 required augmentation in CS2 in order to accommodate URL partitioning. The Host Table written for CS1 assumes that all URLs on a single host are assigned consecutive CS_ids. URL partitioning in accordance with the subject invention connotes a separate series of consecutive CS_ids in each partition. Therefore, the Host Table includes only the starting CS_id and number of CS_ids columns. The “next” column is not necessary, because all CS_ids on a given host are consecutive in CS1. The Host_id column was not necessary CS1 because it is always the row number of that row, never a different row, as it often is in CS2.
2.2 Host Table Index
A significant improvement of the Host Database is manifested the addition of a Host Index. In CS1, the only way to locate the correct row, and hence Host_id, for a CS_id is to perform a binary search over the Host Table rows. The search requires comparing the given CS_id to the starting CS_id for the row. Binary searching requires an average of log2N comparisons, on a table with millions of rows. Accordingly, a table with a million rows requires 20 comparisons.
In CS2, locating a Host_id requires one lookup in the Host Index, to identify a starting row, and then an examination of consecutive Host Table rows until the correct row is found. Although P is an absolute upper bound on the number of rows that needs to be examined, in practice examination of fewer than three rows sufficient, because P is chosen to be much less than the average number of CS_ids in a series. Also, because four Host Table rows fit in the same hardware cache line on most hardware architectures, accessing consecutive Host Table rows is fast. Note, however, that cache line size may vary among processor architectures and that a processor may have access to with multiple caches.
3.0 Link Database
3.1 Link Array Extension
In CS1, the physical storage of the starts and links arrays is the same as the logical array design described with respect to the subject invention. That is, all link array entries are 32-bit absolute CS_ids, and all starts array entries are 32-bit offsets into the links array. It is noteworthy that the offsets correspond to 32 bit CS_ids in CS1, while each offset correspond to a four bit part of a CS_id in CS2. There is no provision for offsets into a links array with 232 or more entries. Stated alternatively, 232 is the maximum number of links that can be stored in CS1. The storage requirement for the link database in CS1 is 4*nURLs bytes for the starts arrays, plus 4*nLinks bytes for the links array, for each of the outlinks and inlinks.
3.2 Compression of Link Starts
In the subject invention, the compression of the starts arrays reduces their size to nURLs*((4+2Q)/Q) for the starts entries in Partition 1, and nURLs*((4+Q)/Q) for the starts entries in Partition 2. In one embodiment of the invention, Q=16, and the size of the average starts entry is reduced to 1.5 bytes from 4 bytes.
3.3 Separation of Link Starts
One other optimization of the starts arrays in the subject invention derives from separate storage of the starts arrays. In CS1, the starts arrays for outlinks and inlinks are stored as a single array, where each array entry had two fields: one for outlinks and one for inlinks. Separating the arrays obviates the need to read both starts arrays in order to use only one. For example, the eigenrank process uses only the inlinks starts and links during most of its computation.
3.4 Compression of Links Arrays
The compression of the links arrays in the subject invention reduces their size. In one embodiment, the average outlinks links entry is 2.16 bytes and the average inlinks entry is 1.23 bytes. Four bytes are required in CS1. The inlinks entries compress more than the outlinks entries because they are sorted. As a result, there is no need to use a sign bit, and, more importantly, their delta values are much smaller.
Finally, the URL partitioning by number of outlinks and inlinks signifies that the most frequently referenced CS_ids have numerically low CS_ids, thereby compressing more efficiently.
Accordingly, although an exemplary embodiment of a Connectivity Server and Associated Data Structure for Web Pages has been described in detail herein, those possessed with ordinary skill in the art will readily apprehend various changes and modifications in form and detail to the subject matter so described, to the subject matter so described, without departure from the spirit and scope of the invention. Consequently, the scope of the invention is not properly delimited by the above Description, but is to be established with reference to the appended Claims, and equivalents thereto.

Claims (33)

What is claimed is:
1. A process for constructing a Host Database comprising:
creating a preliminary Host Table in a connectivity server that collects, arranges and stores data to define the connectivity of pages on the Web,
sorting URLs in a URL database concurrently with the creating of the preliminary Host Table occurring; and
creating a Host Table and a Host Index, the Host Table containing information about the URLs from the preliminary Host Table.
2. A process as defined in claim 1, wherein the preliminary Host Table is provided a plurality of entries, each entry comprising the starting CS_id of a series, the number of CS_ids in series, and a HostFP.
3. A process as defined in claim 2, wherein a the HostFP consists essentially of the fingerprint of a host and a port number portion of a URL.
4. A process as defined in claim 2, wherein the Host Table is created from the preliminary Host Table by:
(i) sorting the preliminary Host Table by CS_id;
(ii) copying entries from the preliminary Host Table to the Host Table;
(iii) creating an index on the preliminary Host Table;
(iv) sorting the index; and
(v) for each entry, storing the related HostFP from the preliminary Host Table, the HostFP for identifying the entry.
5. A process for constructing a URL Database for a connectivity server that collects, arranges and stores data to define the connectivity of pages on the Web, the process comprising:
(a) reading a set of links files, each of which contains a series of source URLs;
(b) calculating a fingerprint for each URL;
(c) creating a temporary URL_info Table in the form of a hash table having as keys the most significant N bits of a URL fingerprint;
(d) creating an ID Index from the URLs_info Table;
(e) assigning CS_ids to URLs;
(f) routing the CS_ids to URLs;
(g) creating a URL Index; and
(h) converting URL fingerprints to CS_ids.
6. A process as defined in claim 5, comprising the further step of providing a URL Database API that operates to translate a URL to a fingerprint, a URL to a CS_id, a fingerprint to a URL, a fingerprint to a CS_id, a CS_id to a URL, or a CS_id to a fingerprint.
7. A process as defined in claim 5, comprising the further steps of dividing the URL Database into partitions and allocating each of the URLs to a partition in accordance with a predetermined characteristic of the respective URL.
8. A process as defined in claim 7, wherein each of the URLs is allocated to a partition in accordance with the importance of the URL.
9. A process as defined in claim 8, wherein the importance of a URL is determined by the indegree or outdegree of the URL.
10. A process as defined in claim 9, wherein the URL Database comprises at least three partitions and wherein Partition0 is occupied by URLs with a respective indegree or outdegree greater than or equal to a first number, Partition1 is occupied by URLs with, a respective indegree or outdegree greater than or equal to a second number but less than the first number, and Partition2 is occupied by URLs with a respective indegree or outdegree less than the second number.
11. A process as defined in claim 10, wherein the first number is 255 and the second number is 16.
12. A process as defined in claim 11, wherein, within each partition, URLs are sorted lexicographically and CS_ids are assigned to URLs sequentially.
13. A process as defined in claim 12, wherein URLs are compressed by, for each URL:
(i) discarding the URL scheme;
(ii) performing a prefix compression; and
(iii) performing a second compression.
14. A process as defined in claim 13, wherein performing the prefix compression comprises the steps:
(ii.a) writing a number followed by a first URL, and
(ii.b) for each URLi subsequent to the first URL, writing a one-byte integer followed by a remainder, where the one-byte integer represents the length of a common prefix shared by a URLi and a URL(i−1) and where the remainder is the portion of URLi following the common prefix.
15. A process as defined in claim 5, wherein URLs are compressed by, for each URL:
(i) discarding the URL scheme;
(ii) performing a prefix compression; and
(iii) performing a second compression.
16. A process as defined in claim 15, wherein performing the prefix compression comprises the steps:
(ii.a) writing a number followed by a first URL; and
(ii.b) for each URLi subsequent to the first URL, writing a one-byte integer followed by a remainder, where the one-byte integer represents the length of a common prefix shared by a URLi and a URL(i−1) and where the remainder is the portion of URLi following the common prefix.
17. A process as defined in claim 5, wherein a fingerprint is calculated for each URL in accordance with a deterministic mathematical function.
18. A process as defined in claim 17, wherein a fingerprint is calculated for each URL according to a hash function that returns a unique integer value corresponding to each unique URL string.
19. A process as defined in claim 17, wherein each record in the URLs_info Table contains remaining M least significant bits of the URL fingerprint.
20. A process as defined in claim 19, wherein each record additionally contains metadata comprising:
(1) the indegree of each URL;
(2) the outdegree of each URL; and
(3) a set of Boolean values.
21. A process as defined in claim 20, wherein the set of Boolean values contains a Boolean value that indicates whether a respective URL has been a source URL.
22. A process as defined in claim 20, wherein the set of Boolean values contains a Boolean value that indicates whether the respective URL has appeared in an input file.
23. A process as defined in claim 20, wherein the set of Boolean values contains a value that indicates whether the URL has appeared as a source URL in an input file.
24. An information storage device for storing, arranging and presenting data defining the connectivity of pages on the Web, the device comprising:
a URL Database that stores URLs and that associates a fingerprint and a CS_id with, each stored URL, the URL Database comprising:
a URL Database API,
a URL Index Array, and
a plurality of partitions that store URLs according to a predetermined criteria;
a Host Database that associates a Host_id with each distinct hostname in the URL Database, the host comprising:
a Host Database API that operates to accept a CS_id and return a corresponding Host_id and to accept a Host_id and return the CS_ids on the corresponding host; and
a Link Database that stores links between source URLs and destination URLs, the link Database comprising:
a Link Database API that operates to retrieve, for a given CS_id, the number of outlinks from the URL corresponding to the CS_id and the number of inlinks to that URL, wherein the device is constructed in accordance with a method comprising:
 (a) reading a set of links files;
 (b) creating a temporary URLs_info Table;
 (c) creating an B) Index from the URLs_info Table;
 (d) assigning CS_ids to URLs;
 (e) writing the CS_ids to the ID Index;
 (f) compressing URLs;
 (g) creating a URL Index;
 (h) creating a Host Table;
 (i) converting URL fingerprints to CS_ids;
 (j) creating outstarts and outlinks tables; and
 (k) writing instarts and inlink tables to a partitioned URL Database.
25. A device as defined in claim 24, wherein the URL Database comprises at least three partitions and wherein Partition0 is occupied by URLs with a respective indegree or outdegree greater than or equal to a first number, Partition1 is occupied by URLs with a respective indegree or outdegree greater than or equal to a second number but less than the first number, and Partition2 is occupied by URLs with a respective indegree or outdegree less than the second number.
26. A device as defined in claim 25, wherein each of the URLs is compressed by:
(i) discarding the URL scheme;
(ii) performing a first, prefix, compression; and
(iii) performing a second compression.
27. A device as defined in claim 26, wherein the prefix compression comprises the steps:
(ii.a) writing a number followed by a first URL; and
(ii.b) for each URLi subsequent to the first URL, writing a one-byte integer followed by a remainder, where the one-byte integer represents the length of a common prefix shared by a URLi and a URL(i−1) and where the remainder is the portion of URLi following the common prefix.
28. A device as defined in claim 27, wherein the Host Database comprises a Host Table, the Host Table in turn comprising a plurality of rows containing information regarding:
(1) a starting CS_id of a consecutive series of CS_ids on the same host;
(2) the number of CS_ids in the series;
(3) the Host_id for the series; and
(4) the row number of the next highest row containing the same Host.
29. A device as defined in claim 28, wherein the Host Database comprises a Host Index, where an ith entry in the Host Index contains the largest Host Table row number whose starting CS_id is less than or equal to i*P.
30. A device as defined in claim 24, wherein in Step (b) links files are read and are decompressed; a fingerprint is computed for each URL and added to the URL_info Table; and upon the first instance of reading a source URL, the URL is written to a URL_sort buffer.
31. A device as defined in claim 30, wherein in Step (c), fingerprints are copied to the ID Index from the temporary URLs_info Table if:
(1) the fingerprint corresponds to a source URL; or
(2) the fingerprint corresponds to a special URL that “appears;” or
(3) the fingerprint corresponds to a URL with a n indegree greater than or equal to a predetermined number and that “appears,” where a URL “appears” if
(i) the URL is a destination URL and appears in the links files at least a predetermined number of times, or
(ii) the URL is a destination URL, is a special URL, and appears in the links files at least once.
32. A device as defined in claim 31, wherein a fingerprint is calculated for each URL in accordance with a deterministic mathematical function.
33. A device as defined in claim 32, wherein a fingerprint is calculated for each URL according to a hash function that returns a unique integer value corresponding to each unique URL string.
US09/664,617 2000-09-19 2000-09-19 Web page connectivity server construction Expired - Lifetime US6701317B1 (en)

Priority Applications (2)

Application Number Priority Date Filing Date Title
US09/664,617 US6701317B1 (en) 2000-09-19 2000-09-19 Web page connectivity server construction
US10/737,729 US7260583B2 (en) 2000-09-19 2003-12-16 Web page connectivity server construction

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US09/664,617 US6701317B1 (en) 2000-09-19 2000-09-19 Web page connectivity server construction

Related Child Applications (1)

Application Number Title Priority Date Filing Date
US10/737,729 Continuation US7260583B2 (en) 2000-09-19 2003-12-16 Web page connectivity server construction

Publications (1)

Publication Number Publication Date
US6701317B1 true US6701317B1 (en) 2004-03-02

Family

ID=31716184

Family Applications (2)

Application Number Title Priority Date Filing Date
US09/664,617 Expired - Lifetime US6701317B1 (en) 2000-09-19 2000-09-19 Web page connectivity server construction
US10/737,729 Expired - Lifetime US7260583B2 (en) 2000-09-19 2003-12-16 Web page connectivity server construction

Family Applications After (1)

Application Number Title Priority Date Filing Date
US10/737,729 Expired - Lifetime US7260583B2 (en) 2000-09-19 2003-12-16 Web page connectivity server construction

Country Status (1)

Country Link
US (2) US6701317B1 (en)

Cited By (115)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020103875A1 (en) * 2001-01-26 2002-08-01 Venkatesh Krishnan Internet appliance remote operator
US20020176611A1 (en) * 2001-05-23 2002-11-28 Dong Mimi C. Fingerprint addressing system and method
US20030084143A1 (en) * 2001-10-31 2003-05-01 Herbert Knoesel Resource locator management system and method
US20040267726A1 (en) * 2003-06-28 2004-12-30 International Business Machines Corporation Hypertext request integrity and user experience
US20050027699A1 (en) * 2003-08-01 2005-02-03 Amr Awadallah Listings optimization using a plurality of data sources
US20050033745A1 (en) * 2000-09-19 2005-02-10 Wiener Janet Lynn Web page connectivity server construction
US20050097202A1 (en) * 2003-11-05 2005-05-05 Hegerty Ian D. Countrytagging
US20050108325A1 (en) * 1999-07-30 2005-05-19 Ponte Jay M. Page aggregation for Web sites
US20050187909A1 (en) * 2004-02-23 2005-08-25 Delefevre Patrick Y. Input mechanism for fingerprint-based internet search
US7043494B1 (en) * 2003-01-28 2006-05-09 Pmc-Sierra, Inc. Fast, deterministic exact match look-ups in large tables
US20060116868A1 (en) * 2001-08-21 2006-06-01 Microsoft Corporation Method and apparatus for robust efficient parsing
US7107272B1 (en) * 2002-12-02 2006-09-12 Storage Technology Corporation Independent distributed metadata system and method
US20060274753A1 (en) * 2005-06-07 2006-12-07 Samsung Electronics Co., Ltd. Method and system for maintaining persistent unique identifiers for devices in a network
US20070061229A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer Managing payment for sponsored content presented to mobile communication facilities
US20070061303A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer Mobile search result clustering
US20070061242A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer Implicit searching for mobile content
US20070060109A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer Managing sponsored content based on user characteristics
US20070061246A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer Mobile campaign creation
US20070060099A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer Managing sponsored content based on usage history
US20070061363A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer Managing sponsored content based on geographic region
US20070061245A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer Location based presentation of mobile content
US20070061301A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer User characteristic influenced search results
US20070061197A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer Presentation of sponsored content on mobile communication facilities
US20070061302A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer Location influenced search results
US20070060173A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer Managing sponsored content based on transaction history
US20070061247A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer Expected value and prioritization of mobile content
US20070061244A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer Increasing mobile interactivity
US20070061317A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer Mobile search substring query completion
US20070073717A1 (en) * 2005-09-14 2007-03-29 Jorey Ramer Mobile comparison shopping
US20070073719A1 (en) * 2005-09-14 2007-03-29 Jorey Ramer Physical navigation of a mobile search application
US20070073718A1 (en) * 2005-09-14 2007-03-29 Jorey Ramer Mobile search service instant activation
US20070073722A1 (en) * 2005-09-14 2007-03-29 Jorey Ramer Calculation and presentation of mobile content expected value
US20070100805A1 (en) * 2005-09-14 2007-05-03 Jorey Ramer Mobile content cross-inventory yield optimization
US20070100653A1 (en) * 2005-11-01 2007-05-03 Jorey Ramer Mobile website analyzer
US20070100806A1 (en) * 2005-11-01 2007-05-03 Jorey Ramer Client libraries for mobile content
US20070100651A1 (en) * 2005-11-01 2007-05-03 Jorey Ramer Mobile payment facilitation
US20070100650A1 (en) * 2005-09-14 2007-05-03 Jorey Ramer Action functionality for mobile content search results
US20070100652A1 (en) * 2005-11-01 2007-05-03 Jorey Ramer Mobile pay per call
US20070143283A1 (en) * 2005-12-09 2007-06-21 Stephan Spencer Method of optimizing search engine rankings through a proxy website
US20070168354A1 (en) * 2005-11-01 2007-07-19 Jorey Ramer Combined algorithmic and editorial-reviewed mobile content search results
US20070168560A1 (en) * 2003-06-06 2007-07-19 Alkire Robert J System and method for compressing URL request parameters
US20070192294A1 (en) * 2005-09-14 2007-08-16 Jorey Ramer Mobile comparison shopping
US20070239724A1 (en) * 2005-09-14 2007-10-11 Jorey Ramer Mobile search services related to direct identifiers
US20070260635A1 (en) * 2005-09-14 2007-11-08 Jorey Ramer Interaction analysis and prioritization of mobile content
US20070266306A1 (en) * 2000-06-29 2007-11-15 Egocentricity Ltd. Site finding
US20070287278A1 (en) * 2006-06-08 2007-12-13 Daubenspeck Timothy H Methods of forming solder connections and structure thereof
US20080016025A1 (en) * 2003-06-28 2008-01-17 Beynon Margaret A R Guaranteeing hypertext link integrity
US20080214204A1 (en) * 2005-11-01 2008-09-04 Jorey Ramer Similarity based location mapping of mobile comm facility users
US20080214153A1 (en) * 2005-09-14 2008-09-04 Jorey Ramer Mobile User Profile Creation based on User Browse Behaviors
US20080214155A1 (en) * 2005-11-01 2008-09-04 Jorey Ramer Integrating subscription content into mobile search results
US20080215623A1 (en) * 2005-09-14 2008-09-04 Jorey Ramer Mobile communication facility usage and social network creation
US20080215557A1 (en) * 2005-11-05 2008-09-04 Jorey Ramer Methods and systems of mobile query classification
US20080214166A1 (en) * 2005-09-14 2008-09-04 Jorey Ramer Location based mobile shopping affinity program
US20080214154A1 (en) * 2005-11-01 2008-09-04 Jorey Ramer Associating mobile and non mobile web content
US20080214162A1 (en) * 2005-09-14 2008-09-04 Jorey Ramer Realtime surveying within mobile sponsored content
US20080214151A1 (en) * 2005-09-14 2008-09-04 Jorey Ramer Methods and systems for mobile coupon placement
US20080214157A1 (en) * 2005-09-14 2008-09-04 Jorey Ramer Categorization of a Mobile User Profile Based on Browse Behavior
US20080215475A1 (en) * 2005-11-05 2008-09-04 Jorey Ramer Exclusivity bidding for mobile sponsored content
US20080214152A1 (en) * 2005-09-14 2008-09-04 Jorey Ramer Methods and systems of mobile dynamic content presentation
US20080242279A1 (en) * 2005-09-14 2008-10-02 Jorey Ramer Behavior-based mobile content placement on a mobile communication facility
US20080270220A1 (en) * 2005-11-05 2008-10-30 Jorey Ramer Embedding a nonsponsored mobile content within a sponsored mobile content
US20090029687A1 (en) * 2005-09-14 2009-01-29 Jorey Ramer Combining mobile and transcoded content in a mobile search result
US20090055436A1 (en) * 2007-08-20 2009-02-26 Olakunle Olaniyi Ayeni System and Method for Integrating on Demand/Pull and Push Flow of Goods-and-Services Meta-Data, Including Coupon and Advertising, with Mobile and Wireless Applications
US7548915B2 (en) 2005-09-14 2009-06-16 Jorey Ramer Contextual mobile content placement on a mobile communication facility
US20090204566A1 (en) * 2008-02-11 2009-08-13 Eric Lawrence Barsness Processing of Deterministic User-Defined Functions Using Multiple Corresponding Hash Tables
US20090222561A1 (en) * 2008-03-03 2009-09-03 International Business Machines Corporation Method, Apparatus and Computer Program Product Implementing Session-Specific URLs and Resources
US20090240569A1 (en) * 2005-09-14 2009-09-24 Jorey Ramer Syndication of a behavioral profile using a monetization platform
US7676394B2 (en) 2005-09-14 2010-03-09 Jumptap, Inc. Dynamic bidding and expected value
US20100082431A1 (en) * 2005-09-14 2010-04-01 Jorey Ramer Contextual Mobile Content Placement on a Mobile Communication Facility
US20100094878A1 (en) * 2005-09-14 2010-04-15 Adam Soroca Contextual Targeting of Content Using a Monetization Platform
US7702318B2 (en) 2005-09-14 2010-04-20 Jumptap, Inc. Presentation of sponsored content based on mobile transaction event
US20100131703A1 (en) * 2007-09-05 2010-05-27 Juniper Networks, Inc. Reducing content addressable memory (cam) power consumption counters
US7729945B1 (en) 1998-03-11 2010-06-01 West Corporation Systems and methods that use geographic data to intelligently select goods and services to offer in telephonic and electronic commerce
US7739162B1 (en) 2001-05-04 2010-06-15 West Corporation System, method, and business method for setting micropayment transaction to a pre-paid instrument
US7752209B2 (en) 2005-09-14 2010-07-06 Jumptap, Inc. Presenting sponsored content on a mobile communication facility
US7769764B2 (en) 2005-09-14 2010-08-03 Jumptap, Inc. Mobile advertisement syndication
US7792702B1 (en) 1998-03-11 2010-09-07 West Corporation Methods and system for providing offers in real time while preserving confidential information
US7822647B1 (en) 1998-03-11 2010-10-26 West Corporation Method and system for providing real time offers to a user based on obsolescence of possessed items
US20100285818A1 (en) * 2009-05-08 2010-11-11 Crawford C S Lee Location based service for directing ads to subscribers
US7853488B1 (en) 1998-03-11 2010-12-14 West Corporation Method, program storage device, and apparatus for offering a user a plurality of scenarios under which to conduct a primary transaction
US7860871B2 (en) 2005-09-14 2010-12-28 Jumptap, Inc. User history influenced search results
US20110143731A1 (en) * 2005-09-14 2011-06-16 Jorey Ramer Mobile Communication Facility Usage Pattern Geographic Based Advertising
US20110177799A1 (en) * 2006-09-13 2011-07-21 Jorey Ramer Methods and systems for mobile coupon placement
US8175585B2 (en) 2005-11-05 2012-05-08 Jumptap, Inc. System for targeting advertising content to a plurality of mobile communication facilities
US8195133B2 (en) 2005-09-14 2012-06-05 Jumptap, Inc. Mobile dynamic advertisement creation and placement
US8201727B1 (en) 1998-03-11 2012-06-19 West Corporation Methods and apparatus for intelligent selection of goods and services offered to conferees
US8209344B2 (en) 2005-09-14 2012-06-26 Jumptap, Inc. Embedding sponsored content in mobile applications
US8229914B2 (en) 2005-09-14 2012-07-24 Jumptap, Inc. Mobile content spidering and compatibility determination
US8275661B1 (en) 1999-03-31 2012-09-25 Verizon Corporate Services Group Inc. Targeted banner advertisements
US8302030B2 (en) 2005-09-14 2012-10-30 Jumptap, Inc. Management of multiple advertising inventories using a monetization platform
US8306908B1 (en) 2002-12-31 2012-11-06 West Corporation Methods and apparatus for intelligent selection of goods and services in telephonic and electronic commerce
US8311888B2 (en) 2005-09-14 2012-11-13 Jumptap, Inc. Revenue models associated with syndication of a behavioral profile using a monetization platform
US8315909B1 (en) 1998-03-11 2012-11-20 West Corporation Methods and apparatus for intelligent selection of goods and services in point-of-sale commerce
US8433297B2 (en) 2005-11-05 2013-04-30 Jumptag, Inc. System for targeting advertising content to a plurality of mobile communication facilities
US8503995B2 (en) 2005-09-14 2013-08-06 Jumptap, Inc. Mobile dynamic advertisement creation and placement
US8571999B2 (en) 2005-11-14 2013-10-29 C. S. Lee Crawford Method of conducting operations for a social network application including activity list generation
US8590013B2 (en) 2002-02-25 2013-11-19 C. S. Lee Crawford Method of managing and communicating data pertaining to software applications for processor-based devices comprising wireless communication circuitry
US8615719B2 (en) 2005-09-14 2013-12-24 Jumptap, Inc. Managing sponsored content for delivery to mobile communication facilities
US8660891B2 (en) 2005-11-01 2014-02-25 Millennial Media Interactive mobile advertisement banners
US8712857B1 (en) 2003-03-31 2014-04-29 Tuxis Technologies Llc Methods and apparatus for intelligent selection of goods and services in mobile commerce
US20140149457A1 (en) * 2012-03-29 2014-05-29 Tencent Technology (Shenzhen) Company Limted Method and apparatus for data storage and downloading
US8769567B1 (en) 2004-09-30 2014-07-01 Tuxis Technologies Llc Methods, media, and apparatus for intelligent selection of items encoded onto portable machine-readable entertainment media
US8805339B2 (en) 2005-09-14 2014-08-12 Millennial Media, Inc. Categorization of a mobile user profile based on browse and viewing behavior
US8812526B2 (en) 2005-09-14 2014-08-19 Millennial Media, Inc. Mobile content cross-inventory yield optimization
US8819659B2 (en) 2005-09-14 2014-08-26 Millennial Media, Inc. Mobile search service instant activation
US8832100B2 (en) 2005-09-14 2014-09-09 Millennial Media, Inc. User transaction history influenced search results
US8989718B2 (en) 2005-09-14 2015-03-24 Millennial Media, Inc. Idle screen advertising
US9058406B2 (en) 2005-09-14 2015-06-16 Millennial Media, Inc. Management of multiple advertising inventories using a monetization platform
US9201979B2 (en) 2005-09-14 2015-12-01 Millennial Media, Inc. Syndication of a behavioral profile associated with an availability condition using a monetization platform
US20160182649A1 (en) * 2013-09-30 2016-06-23 Rakuten, Inc. Url issuing device, url issuing method, and url issuing program
US9703892B2 (en) 2005-09-14 2017-07-11 Millennial Media Llc Predictive text completion for a mobile communication facility
CN107066258A (en) * 2017-03-06 2017-08-18 武汉斗鱼网络科技有限公司 A kind of page iden-tity image updating method and system
US10038756B2 (en) 2005-09-14 2018-07-31 Millenial Media LLC Managing sponsored content based on device characteristics
US10803482B2 (en) 2005-09-14 2020-10-13 Verizon Media Inc. Exclusivity bidding for mobile sponsored content
US10911894B2 (en) 2005-09-14 2021-02-02 Verizon Media Inc. Use of dynamic content generation parameters based on previous performance of those parameters

Families Citing this family (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7391420B1 (en) * 2000-09-28 2008-06-24 At&T Corp. Graphical user interface graphics-based interpolated animation performance
AU2002215210A1 (en) * 2000-11-16 2002-05-27 Telefonaktiebolaget Lm Ericsson (Publ) User authentication apparatus, controlling method thereof, and network system
US7398271B1 (en) * 2001-04-16 2008-07-08 Yahoo! Inc. Using network traffic logs for search enhancement
US7194464B2 (en) 2001-12-07 2007-03-20 Websense, Inc. System and method for adapting an internet filter
US7124358B2 (en) * 2002-01-02 2006-10-17 International Business Machines Corporation Method for dynamically generating reference identifiers in structured information
US7904432B2 (en) * 2003-01-24 2011-03-08 Hewlett-Packard Development Company, L.P. Compressed data structure for extracted changes to a database and method of generating the data structure
US7197497B2 (en) * 2003-04-25 2007-03-27 Overture Services, Inc. Method and apparatus for machine learning a document relevance function
JP4447860B2 (en) * 2003-06-30 2010-04-07 ソニー株式会社 Network camera
US7293005B2 (en) * 2004-01-26 2007-11-06 International Business Machines Corporation Pipelined architecture for global analysis and index building
US7499913B2 (en) * 2004-01-26 2009-03-03 International Business Machines Corporation Method for handling anchor text
US7424467B2 (en) * 2004-01-26 2008-09-09 International Business Machines Corporation Architecture for an indexer with fixed width sort and variable width sort
US8296304B2 (en) 2004-01-26 2012-10-23 International Business Machines Corporation Method, system, and program for handling redirects in a search engine
US7464076B2 (en) * 2004-05-15 2008-12-09 International Business Machines Corporation System and method and computer program product for ranking logical directories
GB2418999A (en) * 2004-09-09 2006-04-12 Surfcontrol Plc Categorizing uniform resource locators
US7461064B2 (en) 2004-09-24 2008-12-02 International Buiness Machines Corporation Method for searching documents for ranges of numeric values
US7653643B2 (en) * 2005-03-24 2010-01-26 Microsoft Corporation Method and apparatus for compressing a data set
GB0512744D0 (en) 2005-06-22 2005-07-27 Blackspider Technologies Method and system for filtering electronic messages
US8417693B2 (en) * 2005-07-14 2013-04-09 International Business Machines Corporation Enforcing native access control to indexed documents
US7565350B2 (en) * 2006-06-19 2009-07-21 Microsoft Corporation Identifying a web page as belonging to a blog
US8615800B2 (en) 2006-07-10 2013-12-24 Websense, Inc. System and method for analyzing web content
US8020206B2 (en) 2006-07-10 2011-09-13 Websense, Inc. System and method of analyzing web content
US7529769B1 (en) * 2006-07-21 2009-05-05 Cap Epsilon, Inc. Data partitioning in multiple databases
US9654495B2 (en) 2006-12-01 2017-05-16 Websense, Llc System and method of analyzing web addresses
GB2458094A (en) 2007-01-09 2009-09-09 Surfcontrol On Demand Ltd URL interception and categorization in firewalls
US20080235163A1 (en) * 2007-03-22 2008-09-25 Srinivasan Balasubramanian System and method for online duplicate detection and elimination in a web crawler
GB0709527D0 (en) 2007-05-18 2007-06-27 Surfcontrol Plc Electronic messaging system, message processing apparatus and message processing method
US8290986B2 (en) * 2007-06-27 2012-10-16 Yahoo! Inc. Determining quality measures for web objects based on searcher behavior
EP2318955A1 (en) 2008-06-30 2011-05-11 Websense, Inc. System and method for dynamic and real-time categorization of webpages
US9130972B2 (en) 2009-05-26 2015-09-08 Websense, Inc. Systems and methods for efficient detection of fingerprinted data and information
US8370302B2 (en) * 2009-06-02 2013-02-05 Hitachi, Ltd. Method and apparatus for block based volume backup
US20120124227A1 (en) * 2010-11-15 2012-05-17 Nabil Al-Khowaiter Browser-based voip service method and system
US9294479B1 (en) * 2010-12-01 2016-03-22 Google Inc. Client-side authentication
US9286378B1 (en) * 2012-08-31 2016-03-15 Facebook, Inc. System and methods for URL entity extraction
CN103118081B (en) * 2013-01-18 2016-01-13 北京奇虎科技有限公司 Server, client, the system and method for browsing pages in prestrain browser
US10778684B2 (en) 2017-04-07 2020-09-15 Citrix Systems, Inc. Systems and methods for securely and transparently proxying SAAS applications through a cloud-hosted or on-premise network gateway for enhanced security and visibility
US10949486B2 (en) * 2017-09-20 2021-03-16 Citrix Systems, Inc. Anchored match algorithm for matching with large sets of URL

Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5797135A (en) 1996-05-01 1998-08-18 Serviceware, Inc. Software structure for data delivery on multiple engines
US5809502A (en) 1996-08-09 1998-09-15 Digital Equipment Corporation Object-oriented interface for an index
US5832500A (en) 1996-08-09 1998-11-03 Digital Equipment Corporation Method for searching an index
US5855020A (en) 1996-02-21 1998-12-29 Infoseek Corporation Web scan process
US5864863A (en) 1996-08-09 1999-01-26 Digital Equipment Corporation Method for parsing, indexing and searching world-wide-web pages
US5899990A (en) * 1997-03-31 1999-05-04 Sun Microsystems, Inc. Java-to-Database Connectivity Server
US5907680A (en) 1996-06-24 1999-05-25 Sun Microsystems, Inc. Client-side, server-side and collaborative spell check of URL's
US6012087A (en) 1997-01-14 2000-01-04 Netmind Technologies, Inc. Unique-change detection of dynamic web pages using history tables of signatures
US6073135A (en) * 1998-03-10 2000-06-06 Alta Vista Company Connectivity server for locating linkage information between Web pages
JP2000207410A (en) 1999-01-14 2000-07-28 Matsushita Electric Ind Co Ltd Url database updating device and url database updating method
US6138113A (en) * 1998-08-10 2000-10-24 Altavista Company Method for identifying near duplicate pages in a hyperlinked database
US6321220B1 (en) * 1998-12-07 2001-11-20 Altavista Company Method and apparatus for preventing topic drift in queries in hyperlinked environments
US6356899B1 (en) * 1998-08-29 2002-03-12 International Business Machines Corporation Method for interactively creating an information database including preferred information elements, such as preferred-authority, world wide web pages

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6665837B1 (en) * 1998-08-10 2003-12-16 Overture Services, Inc. Method for identifying related pages in a hyperlinked database
US6886129B1 (en) * 1999-11-24 2005-04-26 International Business Machines Corporation Method and system for trawling the World-wide Web to identify implicitly-defined communities of web pages
US6701317B1 (en) * 2000-09-19 2004-03-02 Overture Services, Inc. Web page connectivity server construction
US6598051B1 (en) * 2000-09-19 2003-07-22 Altavista Company Web page connectivity server
US6560600B1 (en) * 2000-10-25 2003-05-06 Alta Vista Company Method and apparatus for ranking Web page search results

Patent Citations (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5855020A (en) 1996-02-21 1998-12-29 Infoseek Corporation Web scan process
US5797135A (en) 1996-05-01 1998-08-18 Serviceware, Inc. Software structure for data delivery on multiple engines
US5907680A (en) 1996-06-24 1999-05-25 Sun Microsystems, Inc. Client-side, server-side and collaborative spell check of URL's
US6021409A (en) 1996-08-09 2000-02-01 Digital Equipment Corporation Method for parsing, indexing and searching world-wide-web pages
US5809502A (en) 1996-08-09 1998-09-15 Digital Equipment Corporation Object-oriented interface for an index
US5832500A (en) 1996-08-09 1998-11-03 Digital Equipment Corporation Method for searching an index
US5864863A (en) 1996-08-09 1999-01-26 Digital Equipment Corporation Method for parsing, indexing and searching world-wide-web pages
US6067543A (en) 1996-08-09 2000-05-23 Digital Equipment Corporation Object-oriented interface for an index
US5966710A (en) 1996-08-09 1999-10-12 Digital Equipment Corporation Method for searching an index
US6012087A (en) 1997-01-14 2000-01-04 Netmind Technologies, Inc. Unique-change detection of dynamic web pages using history tables of signatures
US5899990A (en) * 1997-03-31 1999-05-04 Sun Microsystems, Inc. Java-to-Database Connectivity Server
US6073135A (en) * 1998-03-10 2000-06-06 Alta Vista Company Connectivity server for locating linkage information between Web pages
US6138113A (en) * 1998-08-10 2000-10-24 Altavista Company Method for identifying near duplicate pages in a hyperlinked database
US6356899B1 (en) * 1998-08-29 2002-03-12 International Business Machines Corporation Method for interactively creating an information database including preferred information elements, such as preferred-authority, world wide web pages
US6321220B1 (en) * 1998-12-07 2001-11-20 Altavista Company Method and apparatus for preventing topic drift in queries in hyperlinked environments
JP2000207410A (en) 1999-01-14 2000-07-28 Matsushita Electric Ind Co Ltd Url database updating device and url database updating method

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Gun-Woo Nam et al., Dynamic management of URL based on object oriented paradigm, Parallel and Distributed Systems, (1998) Proceedings. 1998 International Conference On, 1998 pp. 226-230.

Cited By (222)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7996279B1 (en) 1998-03-11 2011-08-09 West Corporation Methods and apparatus for intelligent selection of goods and services in telephonic and electronic commerce
US7792702B1 (en) 1998-03-11 2010-09-07 West Corporation Methods and system for providing offers in real time while preserving confidential information
US8315915B1 (en) 1998-03-11 2012-11-20 West Corporation Methods and apparatus for intelligent selection of goods and services in telephonic and electronic commerce
US8290829B1 (en) 1998-03-11 2012-10-16 West Corporation Methods and apparatus for intelligent selection of goods and services in telephonic and electronic commerce
US8793165B1 (en) 1998-03-11 2014-07-29 Tuxis Technologies Llc Method, program storage device, and apparatus for offering a user a plurality of scenarios under which to conduct a primary transaction
US8315909B1 (en) 1998-03-11 2012-11-20 West Corporation Methods and apparatus for intelligent selection of goods and services in point-of-sale commerce
US8201727B1 (en) 1998-03-11 2012-06-19 West Corporation Methods and apparatus for intelligent selection of goods and services offered to conferees
US8655746B1 (en) 1998-03-11 2014-02-18 Tuxis Technologies Llc Methods and system for providing real time offers to a user based on obsolescence of possessed items
US7729945B1 (en) 1998-03-11 2010-06-01 West Corporation Systems and methods that use geographic data to intelligently select goods and services to offer in telephonic and electronic commerce
US7853488B1 (en) 1998-03-11 2010-12-14 West Corporation Method, program storage device, and apparatus for offering a user a plurality of scenarios under which to conduct a primary transaction
US7822647B1 (en) 1998-03-11 2010-10-26 West Corporation Method and system for providing real time offers to a user based on obsolescence of possessed items
US8800861B1 (en) 1998-03-11 2014-08-12 Tuxis Technologies Llc Methods and apparatus for intelligent selection of goods and services offered to conferees
US8275661B1 (en) 1999-03-31 2012-09-25 Verizon Corporate Services Group Inc. Targeted banner advertisements
US20050108325A1 (en) * 1999-07-30 2005-05-19 Ponte Jay M. Page aggregation for Web sites
US8244795B2 (en) * 1999-07-30 2012-08-14 Verizon Laboratories Inc. Page aggregation for web sites
US20070266306A1 (en) * 2000-06-29 2007-11-15 Egocentricity Ltd. Site finding
US20050033745A1 (en) * 2000-09-19 2005-02-10 Wiener Janet Lynn Web page connectivity server construction
US7260583B2 (en) * 2000-09-19 2007-08-21 Overture Services, Inc. Web page connectivity server construction
US20020103875A1 (en) * 2001-01-26 2002-08-01 Venkatesh Krishnan Internet appliance remote operator
US7739162B1 (en) 2001-05-04 2010-06-15 West Corporation System, method, and business method for setting micropayment transaction to a pre-paid instrument
US8244613B1 (en) 2001-05-04 2012-08-14 West Corporation System, method, and business method for settling micropayment transactions to a pre-paid instrument
US20020176611A1 (en) * 2001-05-23 2002-11-28 Dong Mimi C. Fingerprint addressing system and method
US20060116868A1 (en) * 2001-08-21 2006-06-01 Microsoft Corporation Method and apparatus for robust efficient parsing
US7574347B2 (en) * 2001-08-21 2009-08-11 Microsoft Corporation Method and apparatus for robust efficient parsing
US20030084143A1 (en) * 2001-10-31 2003-05-01 Herbert Knoesel Resource locator management system and method
US8590013B2 (en) 2002-02-25 2013-11-19 C. S. Lee Crawford Method of managing and communicating data pertaining to software applications for processor-based devices comprising wireless communication circuitry
US7107272B1 (en) * 2002-12-02 2006-09-12 Storage Technology Corporation Independent distributed metadata system and method
US8306908B1 (en) 2002-12-31 2012-11-06 West Corporation Methods and apparatus for intelligent selection of goods and services in telephonic and electronic commerce
US7043494B1 (en) * 2003-01-28 2006-05-09 Pmc-Sierra, Inc. Fast, deterministic exact match look-ups in large tables
US8712857B1 (en) 2003-03-31 2014-04-29 Tuxis Technologies Llc Methods and apparatus for intelligent selection of goods and services in mobile commerce
US8819287B2 (en) * 2003-06-06 2014-08-26 Ca, Inc. System and method for compressing URL request parameters
US20070168560A1 (en) * 2003-06-06 2007-07-19 Alkire Robert J System and method for compressing URL request parameters
US20040267726A1 (en) * 2003-06-28 2004-12-30 International Business Machines Corporation Hypertext request integrity and user experience
US8135705B2 (en) 2003-06-28 2012-03-13 International Business Machines Corporation Guaranteeing hypertext link integrity
US20080016025A1 (en) * 2003-06-28 2008-01-17 Beynon Margaret A R Guaranteeing hypertext link integrity
US20050027699A1 (en) * 2003-08-01 2005-02-03 Amr Awadallah Listings optimization using a plurality of data sources
US7617203B2 (en) 2003-08-01 2009-11-10 Yahoo! Inc Listings optimization using a plurality of data sources
US20050097202A1 (en) * 2003-11-05 2005-05-05 Hegerty Ian D. Countrytagging
US7441044B2 (en) * 2003-11-05 2008-10-21 Overture Services, Inc. Countrytagging
US7421096B2 (en) * 2004-02-23 2008-09-02 Delefevre Patrick Y Input mechanism for fingerprint-based internet search
US20050187909A1 (en) * 2004-02-23 2005-08-25 Delefevre Patrick Y. Input mechanism for fingerprint-based internet search
US8769567B1 (en) 2004-09-30 2014-07-01 Tuxis Technologies Llc Methods, media, and apparatus for intelligent selection of items encoded onto portable machine-readable entertainment media
US20060274753A1 (en) * 2005-06-07 2006-12-07 Samsung Electronics Co., Ltd. Method and system for maintaining persistent unique identifiers for devices in a network
US8050675B2 (en) 2005-09-14 2011-11-01 Jumptap, Inc. Managing sponsored content based on usage history
US8296184B2 (en) 2005-09-14 2012-10-23 Jumptap, Inc. Managing payment for sponsored content presented to mobile communication facilities
US20070239724A1 (en) * 2005-09-14 2007-10-11 Jorey Ramer Mobile search services related to direct identifiers
US10911894B2 (en) 2005-09-14 2021-02-02 Verizon Media Inc. Use of dynamic content generation parameters based on previous performance of those parameters
US20070192294A1 (en) * 2005-09-14 2007-08-16 Jorey Ramer Mobile comparison shopping
US10803482B2 (en) 2005-09-14 2020-10-13 Verizon Media Inc. Exclusivity bidding for mobile sponsored content
US10592930B2 (en) 2005-09-14 2020-03-17 Millenial Media, LLC Syndication of a behavioral profile using a monetization platform
US20080214153A1 (en) * 2005-09-14 2008-09-04 Jorey Ramer Mobile User Profile Creation based on User Browse Behaviors
US10038756B2 (en) 2005-09-14 2018-07-31 Millenial Media LLC Managing sponsored content based on device characteristics
US20080215623A1 (en) * 2005-09-14 2008-09-04 Jorey Ramer Mobile communication facility usage and social network creation
US9811589B2 (en) 2005-09-14 2017-11-07 Millennial Media Llc Presentation of search results to mobile devices based on television viewing history
US20080214166A1 (en) * 2005-09-14 2008-09-04 Jorey Ramer Location based mobile shopping affinity program
US9785975B2 (en) 2005-09-14 2017-10-10 Millennial Media Llc Dynamic bidding and expected value
US20080214162A1 (en) * 2005-09-14 2008-09-04 Jorey Ramer Realtime surveying within mobile sponsored content
US20080214151A1 (en) * 2005-09-14 2008-09-04 Jorey Ramer Methods and systems for mobile coupon placement
US20080214157A1 (en) * 2005-09-14 2008-09-04 Jorey Ramer Categorization of a Mobile User Profile Based on Browse Behavior
US9754287B2 (en) 2005-09-14 2017-09-05 Millenial Media LLC System for targeting advertising content to a plurality of mobile communication facilities
US20080214152A1 (en) * 2005-09-14 2008-09-04 Jorey Ramer Methods and systems of mobile dynamic content presentation
US20080242279A1 (en) * 2005-09-14 2008-10-02 Jorey Ramer Behavior-based mobile content placement on a mobile communication facility
US9703892B2 (en) 2005-09-14 2017-07-11 Millennial Media Llc Predictive text completion for a mobile communication facility
US9471925B2 (en) 2005-09-14 2016-10-18 Millennial Media Llc Increasing mobile interactivity
US20090029687A1 (en) * 2005-09-14 2009-01-29 Jorey Ramer Combining mobile and transcoded content in a mobile search result
US9454772B2 (en) 2005-09-14 2016-09-27 Millennial Media Inc. Interaction analysis and prioritization of mobile content
US7548915B2 (en) 2005-09-14 2009-06-16 Jorey Ramer Contextual mobile content placement on a mobile communication facility
US9390436B2 (en) 2005-09-14 2016-07-12 Millennial Media, Inc. System for targeting advertising content to a plurality of mobile communication facilities
US9386150B2 (en) 2005-09-14 2016-07-05 Millennia Media, Inc. Presentation of sponsored content on mobile device based on transaction event
US7577665B2 (en) 2005-09-14 2009-08-18 Jumptap, Inc. User characteristic influenced search results
US9384500B2 (en) 2005-09-14 2016-07-05 Millennial Media, Inc. System for targeting advertising content to a plurality of mobile communication facilities
US9271023B2 (en) 2005-09-14 2016-02-23 Millennial Media, Inc. Presentation of search results to mobile devices based on television viewing history
US20090240569A1 (en) * 2005-09-14 2009-09-24 Jorey Ramer Syndication of a behavioral profile using a monetization platform
US7603360B2 (en) 2005-09-14 2009-10-13 Jumptap, Inc. Location influenced search results
US20070100650A1 (en) * 2005-09-14 2007-05-03 Jorey Ramer Action functionality for mobile content search results
US7660581B2 (en) 2005-09-14 2010-02-09 Jumptap, Inc. Managing sponsored content based on usage history
US7676394B2 (en) 2005-09-14 2010-03-09 Jumptap, Inc. Dynamic bidding and expected value
US20100082431A1 (en) * 2005-09-14 2010-04-01 Jorey Ramer Contextual Mobile Content Placement on a Mobile Communication Facility
US20100094878A1 (en) * 2005-09-14 2010-04-15 Adam Soroca Contextual Targeting of Content Using a Monetization Platform
US7702318B2 (en) 2005-09-14 2010-04-20 Jumptap, Inc. Presentation of sponsored content based on mobile transaction event
US9223878B2 (en) 2005-09-14 2015-12-29 Millenial Media, Inc. User characteristic influenced search results
US9201979B2 (en) 2005-09-14 2015-12-01 Millennial Media, Inc. Syndication of a behavioral profile associated with an availability condition using a monetization platform
US20100138293A1 (en) * 2005-09-14 2010-06-03 Jorey Ramer User Characteristic Influenced Search Results
US9195993B2 (en) 2005-09-14 2015-11-24 Millennial Media, Inc. Mobile advertisement syndication
US20100153208A1 (en) * 2005-09-14 2010-06-17 Jorey Ramer Managing Sponsored Content Based on Usage History
US7752209B2 (en) 2005-09-14 2010-07-06 Jumptap, Inc. Presenting sponsored content on a mobile communication facility
US7769764B2 (en) 2005-09-14 2010-08-03 Jumptap, Inc. Mobile advertisement syndication
US20100198681A1 (en) * 2005-09-14 2010-08-05 Jumptap, Inc. Dynamic bidding and expected value
US20100211458A1 (en) * 2005-09-14 2010-08-19 Jorey Ramer Presentation of Sponsored Content Based on Mobile Transaction Event
US20100217663A1 (en) * 2005-09-14 2010-08-26 Jumptap, Inc. Mobile Content Cross-Inventory Yield Optimization
US9110996B2 (en) 2005-09-14 2015-08-18 Millennial Media, Inc. System for targeting advertising content to a plurality of mobile communication facilities
US20070100805A1 (en) * 2005-09-14 2007-05-03 Jorey Ramer Mobile content cross-inventory yield optimization
US9076175B2 (en) 2005-09-14 2015-07-07 Millennial Media, Inc. Mobile comparison shopping
US20100293051A1 (en) * 2005-09-14 2010-11-18 Jumptap, Inc. Mobile Advertisement Syndication
US20070073722A1 (en) * 2005-09-14 2007-03-29 Jorey Ramer Calculation and presentation of mobile content expected value
US7860871B2 (en) 2005-09-14 2010-12-28 Jumptap, Inc. User history influenced search results
US7865187B2 (en) 2005-09-14 2011-01-04 Jumptap, Inc. Managing sponsored content based on usage history
US20110015993A1 (en) * 2005-09-14 2011-01-20 Jumptap, Inc. Managing Sponsored Content Based on Usage History
US20110029378A1 (en) * 2005-09-14 2011-02-03 Jumptap, Inc. User Profile-Based Presentation of Sponsored Mobile Content
US9058406B2 (en) 2005-09-14 2015-06-16 Millennial Media, Inc. Management of multiple advertising inventories using a monetization platform
US7899455B2 (en) 2005-09-14 2011-03-01 Jumptap, Inc. Managing sponsored content based on usage history
US7907940B2 (en) 2005-09-14 2011-03-15 Jumptap, Inc. Presentation of sponsored content based on mobile transaction event
US7912458B2 (en) 2005-09-14 2011-03-22 Jumptap, Inc. Interaction analysis and prioritization of mobile content
US20110143731A1 (en) * 2005-09-14 2011-06-16 Jorey Ramer Mobile Communication Facility Usage Pattern Geographic Based Advertising
US7970389B2 (en) 2005-09-14 2011-06-28 Jumptap, Inc. Presentation of sponsored content based on mobile transaction event
US8995973B2 (en) 2005-09-14 2015-03-31 Millennial Media, Inc. System for targeting advertising content to a plurality of mobile communication facilities
US8995968B2 (en) 2005-09-14 2015-03-31 Millennial Media, Inc. System for targeting advertising content to a plurality of mobile communication facilities
US20070073718A1 (en) * 2005-09-14 2007-03-29 Jorey Ramer Mobile search service instant activation
US8989718B2 (en) 2005-09-14 2015-03-24 Millennial Media, Inc. Idle screen advertising
US8958779B2 (en) 2005-09-14 2015-02-17 Millennial Media, Inc. Mobile dynamic advertisement creation and placement
US8041717B2 (en) 2005-09-14 2011-10-18 Jumptap, Inc. Mobile advertisement syndication
US20070073719A1 (en) * 2005-09-14 2007-03-29 Jorey Ramer Physical navigation of a mobile search application
US8099434B2 (en) 2005-09-14 2012-01-17 Jumptap, Inc. Presenting sponsored content on a mobile communication facility
US8103545B2 (en) 2005-09-14 2012-01-24 Jumptap, Inc. Managing payment for sponsored content presented to mobile communication facilities
US8843396B2 (en) 2005-09-14 2014-09-23 Millennial Media, Inc. Managing payment for sponsored content presented to mobile communication facilities
US20070073717A1 (en) * 2005-09-14 2007-03-29 Jorey Ramer Mobile comparison shopping
US8156128B2 (en) 2005-09-14 2012-04-10 Jumptap, Inc. Contextual mobile content placement on a mobile communication facility
US8843395B2 (en) 2005-09-14 2014-09-23 Millennial Media, Inc. Dynamic bidding and expected value
US8180332B2 (en) 2005-09-14 2012-05-15 Jumptap, Inc. System for targeting advertising content to a plurality of mobile communication facilities
US8195513B2 (en) 2005-09-14 2012-06-05 Jumptap, Inc. Managing payment for sponsored content presented to mobile communication facilities
US8195133B2 (en) 2005-09-14 2012-06-05 Jumptap, Inc. Mobile dynamic advertisement creation and placement
US8200205B2 (en) 2005-09-14 2012-06-12 Jumptap, Inc. Interaction analysis and prioritzation of mobile content
US20070061317A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer Mobile search substring query completion
US8209344B2 (en) 2005-09-14 2012-06-26 Jumptap, Inc. Embedding sponsored content in mobile applications
US8229914B2 (en) 2005-09-14 2012-07-24 Jumptap, Inc. Mobile content spidering and compatibility determination
US8832100B2 (en) 2005-09-14 2014-09-09 Millennial Media, Inc. User transaction history influenced search results
US20070061244A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer Increasing mobile interactivity
US20070061247A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer Expected value and prioritization of mobile content
US8270955B2 (en) 2005-09-14 2012-09-18 Jumptap, Inc. Presentation of sponsored content on mobile device based on transaction event
US20070060173A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer Managing sponsored content based on transaction history
US20070061302A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer Location influenced search results
US8290810B2 (en) 2005-09-14 2012-10-16 Jumptap, Inc. Realtime surveying within mobile sponsored content
US20070260635A1 (en) * 2005-09-14 2007-11-08 Jorey Ramer Interaction analysis and prioritization of mobile content
US8302030B2 (en) 2005-09-14 2012-10-30 Jumptap, Inc. Management of multiple advertising inventories using a monetization platform
US20070061197A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer Presentation of sponsored content on mobile communication facilities
US8311888B2 (en) 2005-09-14 2012-11-13 Jumptap, Inc. Revenue models associated with syndication of a behavioral profile using a monetization platform
US20070061301A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer User characteristic influenced search results
US20070061245A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer Location based presentation of mobile content
US8316031B2 (en) 2005-09-14 2012-11-20 Jumptap, Inc. System for targeting advertising content to a plurality of mobile communication facilities
US8332397B2 (en) 2005-09-14 2012-12-11 Jumptap, Inc. Presenting sponsored content on a mobile communication facility
US8340666B2 (en) 2005-09-14 2012-12-25 Jumptap, Inc. Managing sponsored content based on usage history
US8351933B2 (en) 2005-09-14 2013-01-08 Jumptap, Inc. Managing sponsored content based on usage history
US8359019B2 (en) 2005-09-14 2013-01-22 Jumptap, Inc. Interaction analysis and prioritization of mobile content
US8364540B2 (en) 2005-09-14 2013-01-29 Jumptap, Inc. Contextual targeting of content using a monetization platform
US8364521B2 (en) 2005-09-14 2013-01-29 Jumptap, Inc. Rendering targeted advertisement on mobile communication facilities
US8819659B2 (en) 2005-09-14 2014-08-26 Millennial Media, Inc. Mobile search service instant activation
US8457607B2 (en) 2005-09-14 2013-06-04 Jumptap, Inc. System for targeting advertising content to a plurality of mobile communication facilities
US8463249B2 (en) 2005-09-14 2013-06-11 Jumptap, Inc. System for targeting advertising content to a plurality of mobile communication facilities
US8467774B2 (en) 2005-09-14 2013-06-18 Jumptap, Inc. System for targeting advertising content to a plurality of mobile communication facilities
US8483674B2 (en) 2005-09-14 2013-07-09 Jumptap, Inc. Presentation of sponsored content on mobile device based on transaction event
US8484234B2 (en) 2005-09-14 2013-07-09 Jumptab, Inc. Embedding sponsored content in mobile applications
US8483671B2 (en) 2005-09-14 2013-07-09 Jumptap, Inc. System for targeting advertising content to a plurality of mobile communication facilities
US8489077B2 (en) 2005-09-14 2013-07-16 Jumptap, Inc. System for targeting advertising content to a plurality of mobile communication facilities
US8494500B2 (en) 2005-09-14 2013-07-23 Jumptap, Inc. System for targeting advertising content to a plurality of mobile communication facilities
US8503995B2 (en) 2005-09-14 2013-08-06 Jumptap, Inc. Mobile dynamic advertisement creation and placement
US20070061229A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer Managing payment for sponsored content presented to mobile communication facilities
US8515400B2 (en) 2005-09-14 2013-08-20 Jumptap, Inc. System for targeting advertising content to a plurality of mobile communication facilities
US8515401B2 (en) 2005-09-14 2013-08-20 Jumptap, Inc. System for targeting advertising content to a plurality of mobile communication facilities
US8532634B2 (en) 2005-09-14 2013-09-10 Jumptap, Inc. System for targeting advertising content to a plurality of mobile communication facilities
US8532633B2 (en) 2005-09-14 2013-09-10 Jumptap, Inc. System for targeting advertising content to a plurality of mobile communication facilities
US8538812B2 (en) 2005-09-14 2013-09-17 Jumptap, Inc. Managing payment for sponsored content presented to mobile communication facilities
US8554192B2 (en) 2005-09-14 2013-10-08 Jumptap, Inc. Interaction analysis and prioritization of mobile content
US8560537B2 (en) 2005-09-14 2013-10-15 Jumptap, Inc. Mobile advertisement syndication
US8812526B2 (en) 2005-09-14 2014-08-19 Millennial Media, Inc. Mobile content cross-inventory yield optimization
US8583089B2 (en) 2005-09-14 2013-11-12 Jumptap, Inc. Presentation of sponsored content on mobile device based on transaction event
US20070061363A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer Managing sponsored content based on geographic region
US8615719B2 (en) 2005-09-14 2013-12-24 Jumptap, Inc. Managing sponsored content for delivery to mobile communication facilities
US8620285B2 (en) 2005-09-14 2013-12-31 Millennial Media Methods and systems for mobile coupon placement
US8626736B2 (en) 2005-09-14 2014-01-07 Millennial Media System for targeting advertising content to a plurality of mobile communication facilities
US8631018B2 (en) 2005-09-14 2014-01-14 Millennial Media Presenting sponsored content on a mobile communication facility
US20070060099A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer Managing sponsored content based on usage history
US8655891B2 (en) 2005-09-14 2014-02-18 Millennial Media System for targeting advertising content to a plurality of mobile communication facilities
US8805339B2 (en) 2005-09-14 2014-08-12 Millennial Media, Inc. Categorization of a mobile user profile based on browse and viewing behavior
US8666376B2 (en) 2005-09-14 2014-03-04 Millennial Media Location based mobile shopping affinity program
US8688088B2 (en) 2005-09-14 2014-04-01 Millennial Media System for targeting advertising content to a plurality of mobile communication facilities
US8688671B2 (en) 2005-09-14 2014-04-01 Millennial Media Managing sponsored content based on geographic region
US20070061246A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer Mobile campaign creation
US20070061303A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer Mobile search result clustering
US8768319B2 (en) 2005-09-14 2014-07-01 Millennial Media, Inc. Presentation of sponsored content on mobile device based on transaction event
US20070060109A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer Managing sponsored content based on user characteristics
US8774777B2 (en) 2005-09-14 2014-07-08 Millennial Media, Inc. System for targeting advertising content to a plurality of mobile communication facilities
US20070061242A1 (en) * 2005-09-14 2007-03-15 Jorey Ramer Implicit searching for mobile content
US8798592B2 (en) 2005-09-14 2014-08-05 Jumptap, Inc. System for targeting advertising content to a plurality of mobile communication facilities
US20070168354A1 (en) * 2005-11-01 2007-07-19 Jorey Ramer Combined algorithmic and editorial-reviewed mobile content search results
US8660891B2 (en) 2005-11-01 2014-02-25 Millennial Media Interactive mobile advertisement banners
US20070100652A1 (en) * 2005-11-01 2007-05-03 Jorey Ramer Mobile pay per call
US20080214154A1 (en) * 2005-11-01 2008-09-04 Jorey Ramer Associating mobile and non mobile web content
US20080214155A1 (en) * 2005-11-01 2008-09-04 Jorey Ramer Integrating subscription content into mobile search results
US20070100651A1 (en) * 2005-11-01 2007-05-03 Jorey Ramer Mobile payment facilitation
US20070100806A1 (en) * 2005-11-01 2007-05-03 Jorey Ramer Client libraries for mobile content
US20080214204A1 (en) * 2005-11-01 2008-09-04 Jorey Ramer Similarity based location mapping of mobile comm facility users
US20070100653A1 (en) * 2005-11-01 2007-05-03 Jorey Ramer Mobile website analyzer
US8131271B2 (en) 2005-11-05 2012-03-06 Jumptap, Inc. Categorization of a mobile user profile based on browse behavior
US20080215475A1 (en) * 2005-11-05 2008-09-04 Jorey Ramer Exclusivity bidding for mobile sponsored content
US8433297B2 (en) 2005-11-05 2013-04-30 Jumptag, Inc. System for targeting advertising content to a plurality of mobile communication facilities
US20080270220A1 (en) * 2005-11-05 2008-10-30 Jorey Ramer Embedding a nonsponsored mobile content within a sponsored mobile content
US8509750B2 (en) 2005-11-05 2013-08-13 Jumptap, Inc. System for targeting advertising content to a plurality of mobile communication facilities
US8027879B2 (en) 2005-11-05 2011-09-27 Jumptap, Inc. Exclusivity bidding for mobile sponsored content
US8175585B2 (en) 2005-11-05 2012-05-08 Jumptap, Inc. System for targeting advertising content to a plurality of mobile communication facilities
US20080215557A1 (en) * 2005-11-05 2008-09-04 Jorey Ramer Methods and systems of mobile query classification
US9129303B2 (en) 2005-11-14 2015-09-08 C. S. Lee Crawford Method of conducting social network application operations
US9147201B2 (en) 2005-11-14 2015-09-29 C. S. Lee Crawford Method of conducting social network application operations
US9129304B2 (en) 2005-11-14 2015-09-08 C. S. Lee Crawford Method of conducting social network application operations
US8571999B2 (en) 2005-11-14 2013-10-29 C. S. Lee Crawford Method of conducting operations for a social network application including activity list generation
US20070143283A1 (en) * 2005-12-09 2007-06-21 Stephan Spencer Method of optimizing search engine rankings through a proxy website
US20070287278A1 (en) * 2006-06-08 2007-12-13 Daubenspeck Timothy H Methods of forming solder connections and structure thereof
US8238888B2 (en) 2006-09-13 2012-08-07 Jumptap, Inc. Methods and systems for mobile coupon placement
US20110177799A1 (en) * 2006-09-13 2011-07-21 Jorey Ramer Methods and systems for mobile coupon placement
US20090055436A1 (en) * 2007-08-20 2009-02-26 Olakunle Olaniyi Ayeni System and Method for Integrating on Demand/Pull and Push Flow of Goods-and-Services Meta-Data, Including Coupon and Advertising, with Mobile and Wireless Applications
US20100131703A1 (en) * 2007-09-05 2010-05-27 Juniper Networks, Inc. Reducing content addressable memory (cam) power consumption counters
US7984235B2 (en) * 2007-09-05 2011-07-19 Juniper Networks, Inc. Reducing content addressable memory (CAM) power consumption counters
US20090204566A1 (en) * 2008-02-11 2009-08-13 Eric Lawrence Barsness Processing of Deterministic User-Defined Functions Using Multiple Corresponding Hash Tables
US7890480B2 (en) * 2008-02-11 2011-02-15 International Business Machines Corporation Processing of deterministic user-defined functions using multiple corresponding hash tables
US8028072B2 (en) * 2008-03-03 2011-09-27 International Business Machines Corporation Method, apparatus and computer program product implementing session-specific URLs and resources
US20090222561A1 (en) * 2008-03-03 2009-09-03 International Business Machines Corporation Method, Apparatus and Computer Program Product Implementing Session-Specific URLs and Resources
WO2009109498A1 (en) * 2008-03-03 2009-09-11 International Business Machines Corporation IMPLEMENTING SESSION-SPECIFIC URLs AND RESOURCES
US20100285818A1 (en) * 2009-05-08 2010-11-11 Crawford C S Lee Location based service for directing ads to subscribers
US9183214B2 (en) * 2012-03-29 2015-11-10 Tencent Technology (Shenzhen) Company Limited Method and apparatus for data storage and downloading
US20140149457A1 (en) * 2012-03-29 2014-05-29 Tencent Technology (Shenzhen) Company Limted Method and apparatus for data storage and downloading
US20160182649A1 (en) * 2013-09-30 2016-06-23 Rakuten, Inc. Url issuing device, url issuing method, and url issuing program
US9882991B2 (en) * 2013-09-30 2018-01-30 Rakuten, Inc. URL issuing device, URL issuing method, and URL issuing program
CN107066258A (en) * 2017-03-06 2017-08-18 武汉斗鱼网络科技有限公司 A kind of page iden-tity image updating method and system

Also Published As

Publication number Publication date
US20050033745A1 (en) 2005-02-10
US7260583B2 (en) 2007-08-21

Similar Documents

Publication Publication Date Title
US6701317B1 (en) Web page connectivity server construction
US6598051B1 (en) Web page connectivity server
US6073135A (en) Connectivity server for locating linkage information between Web pages
US6721749B1 (en) Populating a data warehouse using a pipeline approach
KR100414236B1 (en) A search system and method for retrieval of data
US6278992B1 (en) Search engine using indexing method for storing and retrieving data
US9805080B2 (en) Data driven relational algorithm formation for execution against big data
US8180774B2 (en) Web-scale data processing system and method
Raghavan et al. Representing web graphs
Sinha et al. Multi-resolution bitmap indexes for scientific data
US9104675B1 (en) Inode to pathname support with a hard link database
Suel et al. Compressing the graph structure of the web
Melink et al. Building a distributed full-text index for the web
US7424467B2 (en) Architecture for an indexer with fixed width sort and variable width sort
US20030204513A1 (en) System and methodology for providing compact B-Tree
KR101086575B1 (en) Type path indexing
US8209305B2 (en) Incremental update scheme for hyperlink database
US20030135495A1 (en) Database indexing method and apparatus
US20070255748A1 (en) Method of structuring and compressing labeled trees of arbitrary degree and shape
US20020152219A1 (en) Data interexchange protocol
CN105793843A (en) Combined row and columnar storage for in-memory databases for OLTP and analytics workloads
CN111400323A (en) Data retrieval method, system, device and storage medium
CN116034349A (en) Probabilistic text indexing of semi-structured data in a columnar analysis storage format
US7512608B2 (en) Method for processing structured documents stored in a database
EP3311494A1 (en) Performing multidimensional search, content-associative retrieval, and keyword-based search and retrieval on data that has been losslessly reduced using a prime data sieve

Legal Events

Date Code Title Description
AS Assignment

Owner name: ALTA VISTA COMPANY, CALIFORNIA

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:BURROWS, MICHAEL;WIENER, JANET L.;REEL/FRAME:012047/0653;SIGNING DATES FROM 20010718 TO 20010724 SIGNING DATES FROM 20010718 TO 20010724

AS Assignment

Owner name: OVERTURE SERVICES, INC., CALIFORNIA

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:ALTA VISTA COMPANY;REEL/FRAME:014394/0899

Effective date: 20030425

STCF Information on status: patent grant

Free format text: PATENTED CASE

FPAY Fee payment

Year of fee payment: 4

AS Assignment

Owner name: YAHOO! INC,CALIFORNIA

Free format text: MERGER;ASSIGNOR:OVERTURE SERVICES, INC;REEL/FRAME:021652/0654

Effective date: 20081001

Owner name: YAHOO! INC, CALIFORNIA

Free format text: MERGER;ASSIGNOR:OVERTURE SERVICES, INC;REEL/FRAME:021652/0654

Effective date: 20081001

FPAY Fee payment

Year of fee payment: 8

FEPP Fee payment procedure

Free format text: PAYER NUMBER DE-ASSIGNED (ORIGINAL EVENT CODE: RMPN); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY

Free format text: PAYOR NUMBER ASSIGNED (ORIGINAL EVENT CODE: ASPN); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY

FPAY Fee payment

Year of fee payment: 12

AS Assignment

Owner name: EXCALIBUR IP, LLC, CALIFORNIA

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:YAHOO! INC.;REEL/FRAME:038383/0466

Effective date: 20160418

AS Assignment

Owner name: YAHOO! INC., CALIFORNIA

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:EXCALIBUR IP, LLC;REEL/FRAME:038951/0295

Effective date: 20160531

AS Assignment

Owner name: EXCALIBUR IP, LLC, CALIFORNIA

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:YAHOO! INC.;REEL/FRAME:038950/0592

Effective date: 20160531

AS Assignment

Owner name: STARBOARD VALUE INTERMEDIATE FUND LP, AS COLLATERAL AGENT, NEW YORK

Free format text: PATENT SECURITY AGREEMENT;ASSIGNORS:ACACIA RESEARCH GROUP LLC;AMERICAN VEHICULAR SCIENCES LLC;BONUTTI SKELETAL INNOVATIONS LLC;AND OTHERS;REEL/FRAME:052853/0153

Effective date: 20200604

AS Assignment

Owner name: R2 SOLUTIONS LLC, TEXAS

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:EXCALIBUR IP, LLC;REEL/FRAME:053459/0059

Effective date: 20200428

AS Assignment

Owner name: TELECONFERENCE SYSTEMS LLC, TEXAS

Free format text: RELEASE OF SECURITY INTEREST IN PATENTS;ASSIGNOR:STARBOARD VALUE INTERMEDIATE FUND LP;REEL/FRAME:053654/0254

Effective date: 20200630

Owner name: PARTHENON UNIFIED MEMORY ARCHITECTURE LLC, TEXAS

Free format text: RELEASE OF SECURITY INTEREST IN PATENTS;ASSIGNOR:STARBOARD VALUE INTERMEDIATE FUND LP;REEL/FRAME:053654/0254

Effective date: 20200630

Owner name: SUPER INTERCONNECT TECHNOLOGIES LLC, TEXAS

Free format text: RELEASE OF SECURITY INTEREST IN PATENTS;ASSIGNOR:STARBOARD VALUE INTERMEDIATE FUND LP;REEL/FRAME:053654/0254

Effective date: 20200630

Owner name: INNOVATIVE DISPLAY TECHNOLOGIES LLC, TEXAS

Free format text: RELEASE OF SECURITY INTEREST IN PATENTS;ASSIGNOR:STARBOARD VALUE INTERMEDIATE FUND LP;REEL/FRAME:053654/0254

Effective date: 20200630

Owner name: STINGRAY IP SOLUTIONS LLC, TEXAS

Free format text: RELEASE OF SECURITY INTEREST IN PATENTS;ASSIGNOR:STARBOARD VALUE INTERMEDIATE FUND LP;REEL/FRAME:053654/0254

Effective date: 20200630

Owner name: LIFEPORT SCIENCES LLC, TEXAS

Free format text: RELEASE OF SECURITY INTEREST IN PATENTS;ASSIGNOR:STARBOARD VALUE INTERMEDIATE FUND LP;REEL/FRAME:053654/0254

Effective date: 20200630

Owner name: NEXUS DISPLAY TECHNOLOGIES LLC, TEXAS

Free format text: RELEASE OF SECURITY INTEREST IN PATENTS;ASSIGNOR:STARBOARD VALUE INTERMEDIATE FUND LP;REEL/FRAME:053654/0254

Effective date: 20200630

Owner name: ACACIA RESEARCH GROUP LLC, NEW YORK

Free format text: RELEASE OF SECURITY INTEREST IN PATENTS;ASSIGNOR:STARBOARD VALUE INTERMEDIATE FUND LP;REEL/FRAME:053654/0254

Effective date: 20200630

Owner name: LIMESTONE MEMORY SYSTEMS LLC, CALIFORNIA

Free format text: RELEASE OF SECURITY INTEREST IN PATENTS;ASSIGNOR:STARBOARD VALUE INTERMEDIATE FUND LP;REEL/FRAME:053654/0254

Effective date: 20200630

Owner name: BONUTTI SKELETAL INNOVATIONS LLC, TEXAS

Free format text: RELEASE OF SECURITY INTEREST IN PATENTS;ASSIGNOR:STARBOARD VALUE INTERMEDIATE FUND LP;REEL/FRAME:053654/0254

Effective date: 20200630

Owner name: UNIFICATION TECHNOLOGIES LLC, TEXAS

Free format text: RELEASE OF SECURITY INTEREST IN PATENTS;ASSIGNOR:STARBOARD VALUE INTERMEDIATE FUND LP;REEL/FRAME:053654/0254

Effective date: 20200630

Owner name: CELLULAR COMMUNICATIONS EQUIPMENT LLC, TEXAS

Free format text: RELEASE OF SECURITY INTEREST IN PATENTS;ASSIGNOR:STARBOARD VALUE INTERMEDIATE FUND LP;REEL/FRAME:053654/0254

Effective date: 20200630

Owner name: SAINT LAWRENCE COMMUNICATIONS LLC, TEXAS

Free format text: RELEASE OF SECURITY INTEREST IN PATENTS;ASSIGNOR:STARBOARD VALUE INTERMEDIATE FUND LP;REEL/FRAME:053654/0254

Effective date: 20200630

Owner name: AMERICAN VEHICULAR SCIENCES LLC, TEXAS

Free format text: RELEASE OF SECURITY INTEREST IN PATENTS;ASSIGNOR:STARBOARD VALUE INTERMEDIATE FUND LP;REEL/FRAME:053654/0254

Effective date: 20200630

Owner name: MOBILE ENHANCEMENT SOLUTIONS LLC, TEXAS

Free format text: RELEASE OF SECURITY INTEREST IN PATENTS;ASSIGNOR:STARBOARD VALUE INTERMEDIATE FUND LP;REEL/FRAME:053654/0254

Effective date: 20200630

Owner name: R2 SOLUTIONS LLC, TEXAS

Free format text: RELEASE OF SECURITY INTEREST IN PATENTS;ASSIGNOR:STARBOARD VALUE INTERMEDIATE FUND LP;REEL/FRAME:053654/0254

Effective date: 20200630

Owner name: MONARCH NETWORKING SOLUTIONS LLC, CALIFORNIA

Free format text: RELEASE OF SECURITY INTEREST IN PATENTS;ASSIGNOR:STARBOARD VALUE INTERMEDIATE FUND LP;REEL/FRAME:053654/0254

Effective date: 20200630

AS Assignment

Owner name: R2 SOLUTIONS LLC, TEXAS

Free format text: CORRECTIVE ASSIGNMENT TO CORRECT THE ASSIGNEE NAME PREVIOUSLY RECORDED ON REEL 053654 FRAME 0254. ASSIGNOR(S) HEREBY CONFIRMS THE RELEASE OF SECURITY INTEREST GRANTED PURSUANT TO THE PATENT SECURITY AGREEMENT PREVIOUSLY RECORDED;ASSIGNOR:STARBOARD VALUE INTERMEDIATE FUND LP;REEL/FRAME:054981/0377

Effective date: 20200630

AS Assignment

Owner name: STARBOARD VALUE INTERMEDIATE FUND LP, AS COLLATERAL AGENT, NEW YORK

Free format text: CORRECTIVE ASSIGNMENT TO CORRECT THE THE ASSIGNOR NAME PREVIOUSLY RECORDED AT REEL: 052853 FRAME: 0153. ASSIGNOR(S) HEREBY CONFIRMS THE ASSIGNMENT;ASSIGNOR:R2 SOLUTIONS LLC;REEL/FRAME:056832/0001

Effective date: 20200604