UPDATING VARIABLE DATA AT CLIENTS
RELATED APPLICATIONS
This application claims priority as well as the benefit under 35 USC 119(e) of USSN
60/436,914 filed on December 27, 2002, USSN 60/468,730 filed on May 6, 2003, USSN 60/474,858 filed on May 30, 2003 and also claims priority and is a continuation in part of
PCT/IL03/00462 filed on June 2, 2003, which designates the US and is filed in English. The disclosures of all of these applications is incorporated herein by reference.
FIELD OF THE INVENTION The present invention relates to a computer server providing data updates to client stations.
BACKGROUND OF THE INVENTION Some professions, for example stock brokers and currency dealers, use a real-time flow of data, updated periodically on a display, to assist them in making professional decisions. Computerized systems have been implemented where a communication server receives the real-time flow of data from one or more data suppliers and stores the data in a database system. Multiple clients invoke the database system in order to retrieve the information they need.
In some applications the data changes at a high rate, for example every second or faster. A single database server is computationally limited in the number of clients it can support simultaneously in retrieving and transmitting data. Generally such limitations are handled by providing multiple servers or faster and more expensive hardware for servers.
SUMMARY OF THE INVENTION An aspect of some embodiments of the invention, relates to a method of providing high interest data to clients (e.g. current exchange rate, current stock values) by supplying the high interest data directly from a buffer instead of retrieving it from a database. One or more of the following advantages are possibly provided: the support of more clients, a faster data update rate to the clients and a faster response to user queries, without upgrading the system hardware.
In an exemplary embodiment of the invention, a client server receives a real time flow of data in addition to its supply to a database server. The client server updates the current values of each field in a local last value buffer. The client server further pushes the last value data to the necessary clients. Thus the client server eliminates the need to access the database server for retrieval of some or all of the high interest data.
In some embodiments of the invention, the client stations are dumb stations that simply display a flow of values supplied by the client server, for example a mobile telephone. Alternatively or additionally, the client stations are smart stations that receive the real time flow of data directly, and update the current values in their own internal local last value buffer. An aspect of some embodiments of the invention, relates to a distribution server that manages the buffered data by maintaining a separate buffer for each variable. Optionally, a pre-selected number of last values are buffered for each variable. Optionally, a circular buffer is used. In some embodiments of the invention, the server managing the buffered data additionally maintains a client list which includes, for each client or group of data vales, a list of indications of the values. Optionally, the client list comprises a hash table that supplies a pointer to the required values in the buffers.
In some embodiments of the invention, each client receives from the buffered variables, only the values it selected to receive.
There is thus provided in accordance with an exemplary embodiment of the invention, a system for updating variables at client stations comprising: a receiver server that receives the data from one or more data sources; a last value server that stores in a buffer the current last value for each variable from said data; and one or more client stations that display the current updated last value of one or more of the variables from said data. Optionally, the system comprises a database server that stores said data. Alternatively or additionally, the system comprises a real time server that receives said data from said receiver server and transmits segments of said data.
In an exemplary embodiment of the invention, at least one client station receives variables of said data from said last value server. In an exemplary embodiment of the invention, the system comprises a client server that receives a segment of said data from said real time server. Optionally, at least one client station receives variables of said data from said client server. Alternatively or additionally, at least one client station receives initial values of variables from one server and updated values of the variables from a different server. In an exemplary embodiment of the invention, said last value server holds a single last value for each variable in the data.
In an exemplary embodiment of the invention, said last value server holds multiple last values for each variable in the data.
In an exemplary embodiment of the invention, said client station receives updates whenever there is a change of a variable.
In an exemplary embodiment of the invention, said client station receives updates at set time intervals. There is also provided in accordance with an exemplary embodiment of the invention, a method of a supplying a realtime flow of data for updating variables at client stations, comprising: collecting the data from one or more sources by a receiver server; transmitting the last value received for each variable from the data to a last value server, which stores in a buffer the current last known value for each variable; and receiving the data by a client station which displays the updated variables. Optionally, said data received by said client station is in a format ready for display on said client station. Alternatively, said data received by said client station is in a format not ready for display on said client station. In an exemplary embodiment of the invention, said client station receives said data from said last value server.
In an exemplary embodiment of the invention, said client station receives only initial data from said last value server.
There is also provided in accordance with an exemplary embodiment of the invention, a distribution node for repeatedly distributing updating data to clients, comprising: an information storage unit comprising a plurality of storage locations, each storage location associated with a variable; a user request input which receives requests from a plurality of users, said requests including a group indicator; a user lookup table matching a group indicator with a plurality of variable storage location indicators, at least some of said variable storage location indicators indicating particular variable values, wherein at least 10 of said group indicators include overlapping variables; a user response output which collects variable values indicated by said group indicator and sends said values to a user which made said request; and a data update input adapted to directly update variable values in said locations in said information storage unit with data updates from outside of said distribution node.
Optionally, at least some of said storage locations store only a single value. Alternatively or additionally, at least some of said storage locations are arranged and updated
as circular buffers. Optionally, different ones of said buffers have different numbers of values stored therein. Optionally, a size of at least some of said buffers is determined based on variable value update rate.
In an exemplary embodiment of the invention, said user response output provides a most current value for each required variable.
In an exemplary embodiment of the invention, said user response output provides multiple values for each required variable.
In an exemplary embodiment of the invention, said node sends a data vector to at least some users whenever a variable changes. In an exemplary embodiment of the invention, said node sends a data vector to at least some users at set time intervals.
In an exemplary embodiment of the invention, said distribution node is adapted to supply data to a particular geographical areas.
In an exemplary embodiment of the invention, said user response output provides a formatted data page formed from a template.
In an exemplary embodiment of the invention, said user response output collects different values for different user request types having different communication rates.
In an exemplary embodiment of the invention, said user request is provided during an initiation step and includes an update schedule. In an exemplary embodiment of the invention, each user has a private group indicator.
In an exemplary embodiment of the invention, multiple users may use a same group indicator.
In an exemplary embodiment of the invention, at least 200 group indicators have overlapping variables. BRIEF DESCRIPTION OF THE DRAWINGS
Particular non-limiting embodiments of the invention will be described with reference to the following description of embodiments in conjunction with the figures. Identical structures, elements or parts which appear in more than one figure are preferably labeled with a same or similar number in all the figures in which they appear, in which: Fig. 1 is a schematic illustration of a client server data distribution system according to an exemplary embodiment of the invention;
Fig. 2 is a flow diagram of the actions initiated and performed by the client server in dealing with standard client stations according to an exemplary embodiment of the invention;
Fig. 3 is a flow diagram of the actions initiated and performed by the data distribution system in dealing with smart client stations according to an exemplary embodiment of the invention;
Fig. 4 is a schematic illustration of a client server data distribution system according to an exemplary embodiment of the invention;
Fig. 5 is a schematic illustration of a multi dimensional data array according to an exemplary embodiment of the invention; and
Fig. 6 is a schematic illustration of a multi dimensional data array according to an exemplary embodiment of the invention. DETAILED DESCRIPTION OF EXEMPLARY EMBODIMENTS
Fig. 1 is a schematic illustration of a client server data distribution system 100 in accordance with an exemplary embodiment of the invention. A receiver server 120 receives real time data streams from one or more data source servers 110 and combines them to produce a data stream with the content needed for distribution in distribution system 100. For example in a distribution system that supplies worldwide stock exchange data the receiver server 120 collects data from various stock exchange sources.
In some embodiments of the invention, the data collected by receiver server 120 is transmitted to one or more of three servers. Alternatively, in some embodiments of the invention, only some of the servers are needed. One of the servers is a database server 130 which stores all the collected data in a database system. The database server allows clients to retrieve data for manipulation, for example statistical reports and the values of a variable as a function of time. In contrast, prior art systems store and retrieve the data from database server 130, thus providing one data retrieval source for the client stations. A second server is a last value server 140, this server receives the last value received for any specific variable in the data stream. Whenever a new value is received by receiver server 120 the value is provided to last value server 140 so that at any moment last value server 140 holds the last known value for all variables of the data. Optionally, last value server 140, supplies some clients with the values in a format ready for display or partially ready for display, for example in order to reduce redundant content processing or support simple client stations, which do not have the ability or processing power to prepare the data for display. It should be noted that some variables may be updated frequently, for example, every second or faster and some variables may be updated infrequently, for example, once a day or once a week or slower.
A third server is a real time server 150, which receives the current data for distribution to clients. Real time server 150 in contrast to database server 130 does not supply stored data or answer queries and in contrast to last value server 140 may lack the current value of some variables which are not currently being transmitted. In some embodiments of the invention, last value server 140 does not store all the real time data available for each variable at a specific time interval, but rather stores only one last value or a few last values for each variable. This substantially reduces the amount of data handled by last value server 140, and hence accelerates the operation of the server. In some embodiments of the invention, the values stored by last value server 140 are not accompanied by timing information and/or sequencing data, as only a single value, or a predetermined number (e.g., three last values) of recent values, for each variable are stored in the server, in these embodiments. Alternatively or additionally, last value server 140 determines how many values of each variable to store according to the needs of the clients with or without relation to their previous usage pattern and/or their latest update time or update pattern. In some embodiments of the invention, last value server includes a simple managing software which is limited in the number of tasks it can perform. Optionally, the only tasks that last value server 140 is adapted to perform are those tasks required to store the values, and other tasks, such as searching, sorting and/or retrieving data based on other keys than pre- designated, are not supported by last value server 140. In some embodiments of the invention, last value server 140 does not support a database management language such as SQL. Such languages are very heavy and reduce the response time of the server supporting them.
In some embodiments of the invention, receiver server 120 transmits only to one or two of servers 130, 140 and 150. Optionally, the other servers receive the data indirectly from the server that received the data. For example real time server 150 receives the data collected by receiver server 120 and transmits the data to database server 130 and last value server 140. In some embodiments of the invention, real time server 150 receives the data directly from receiver server 120 in order to enhance the response time of real time server 150.
In an exemplary embodiment of the invention, a client server 160 interfaces the three servers (130,140 and 150), by methods described below, for accepting from them data and serving the requests of standard client stations 180 and/or smart client stations 190.
Fig. 2 is a flow diagram 200 of the actions initiated and performed by client server 160 in dealing with standard client stations 180 according to an exemplary embodiment of the invention.
At 210, client server 160 initializes a local last buffer 170 with the current last values, which are retrieved from last value server 140. These values optionally include a last value for all variables which can be displayed by the client stations 180. In some embodiments of the invention, client server 160 retrieves only a specific last value or a specific group of last values according to the clients supported by client server 160. Optionally, receiving only a selected group of variables reduces the time required for initializing or updating client server 160. For example multiple client servers 160 may support different groups of client stations 180 requiring different content (e.g. stocks of local companies, stocks of global companies).
At 220, client server 160 begins to accept a realtime flow of data from realtime server 150, in order to continuously update local last buffer 170 with the changing values as they are updated. When a new value arrives for any of the variables displayed by client station 180 client server 160 updates (230) local last buffer 170 with the current values of the variables received from realtime server 150. Optionally, the values are stored in local last buffer 170 in a format ready for display on client station 180, thus eliminating the need to format the data at each client station 180. In some embodiments of the invention, client station 180 is a dedicated process machine, for example a cellular telephone, which does not allow general process applications to take control and change data formats. In an exemplary embodiment of the invention, local last buffer 170 'maintains multiple sets of last values formatted in different formats in order to support different types of client stations 180 with different character encodings.
At 240, client server 160 accepts requests from standard client stations 180 to login to system 100 and receive the flow of data. In order to handle such a request client server 160 optionally invokes (250) database server 130 to receive authorization for the requester to login. Database server 130 optionally, maintains a list of users, passwords and authorization for authorizing standard client stations 180 and/or optionally, log usage of the system by standard client stations 180.
At 260 client server 160 continuously transmits the content, which was authorized for the client, from local last buffer 170 to standard client station 180 until the client disconnects. In some embodiments of the invention, client server 160 transmits according to a set time interval, for example every second, alternatively or additionally, client server 160 transmits every time there is a change in the contents of local last buffer 170.
In some embodiments of the invention, client server 160 supplies client station 180 with content according to the user's identity. Alternatively or additionally, client station 180
requests content according to preselected queries, where client server 160 supplies client station 180 with the selected content according to the user's selection.
In some embodiments of the invention, servers 120, 130, 140, 150 and 160 are each hosted on a different computer or multiple instances of each server are hosted on different computers, such that a separate processor handles each server task. Alternatively, some of the servers, reside on the same computer and represent different tasks handled by the processor. For example, receiver server 120 and database server 130 may be processes on one computer and last value server 140, realtime server 150 and client server 160 may be processes on a different computer. In some embodiments of the invention, all the servers reside at one location and are connected together locally, for example over a local area network. Alternatively some of the servers may be locally connected and some may be connected over a wide area network, for example all the servers may be connected over the Internet, wherein each server comprises a web server. In an exemplary embodiment of the invention, the standard client stations 180 are dumb client stations such as mobile telephones, PDA's or a computer with a dumb client application. A dumb client typically lacks the processing power or ability to format the data for display and/or cannot keep up "with the rate required to prepare the data for display. In an exemplary embodiment of the invention, such clients need to be spoon fed with formatted data. Optionally, client server 160 prepares, in local last buffer 170, the current last data in a format which can be accepted by client station 180 and pushes the data to all standard client stations 180 that are logged in to the realtime data flow. Alternatively or additionally, last value server 140 serves as the client server for client stations 180. Further alternatively or additionally, some of the clients are smart client stations 190 with the ability to receive and prepare the data for display themselves. In some embodiments of the invention, smart client stations 190, receive the realtime data flow over a connection 195 directly from realtime server 150. Optionally, smart client stations 190 update their own local last buffers and prepare desired data to be displayed for the user.
Fig. 3 is a flow diagram 300 of the actions initiated and performed by data distribution system 100 in dealing with smart client stations 190, according to an exemplary embodiment of the invention. At 310 client server 160 initializes local last buffer 170 with the current last values, which are retrieved from last value server 140. These values supply client server 160 with the last values of record for all the variable which are displayed by client station 190. In some embodiments of the invention, after initializing local last buffer 170, client server 160
continuously updates the last values from the realtime stream as described above, in order to be able to supply client stations 190 with the current last values at any moment and/or support standard client stations 180 as described above. Alternatively or additionally, when a client station 190 logs in, client server 160 refetches the current last values from last value server 140 in order to initialize the values of the client. It should be noted that a client server 160 handling only client stations 190 does not need to continuously update it's local last buffer 170 since it only needs to initialize the client stations 190, and the stations perform the update. In contrast when supporting client stations 180, client server 160 performs the update for the client stations. At 320, client server 160 accepts requests from client stations 190 to login to system
100 and receive the realtime flow of data. Upon receiving a login request, client server 160 invokes (330) database server 130, which keeps a list of the clients authorized to login and receive the data stream, and checks if the client is allowed to receive the data stream.
After receiving authorization for a client station 190, client server 160 supplies (340) client station 190 with the current last values from last buffer 170 and optionally, supplies client station 190 with an application for processing and displaying the data, for example a dynamic HTML application that can execute under a standard web browser such as described in Israeli Patent Application 149977 filed June 2, 2002 and USSN 60/474,858, filed May 30, 2003, the disclosures of which are incorporated herein by reference. This application describes among other things, the creation of a dynamic script application, for example, using Java script, wherein the application generates and erases its code dynamically during execution. The application described runs under a standard web browser such as Microsoft Internet Explorer
After initializing client station 190, client server 160 notifies (350) realtime server 150 to enable transmission of the realtime data to client station 190. In some embodiments of the invention, realtime server 150 broadcasts the data or transmits it freely upon request. Alternatively or additionally, realtime server 150 limits the use of the data by requiring a password or encryption key in order to access the data. Optionally, when logging in client server 160 supplies client station 190 with a password or encryption key in order to access the data.
At 360 client station 190 receives the continuous data flow and (370) updates its own local last buffer to contain the correct last values for display in an appropriate representation.
Optionally, last value server 140 and/or last buffer 170 contain more than one value for each variable, for example the last value and the next to last value in order to enhance data supply to users.
In some embodiments of the invention, last value server 140 and/or realtime server 150 allow receivers to receive a flow of a segment of the content, for example local stock values and global stock values. Thus reducing the transmission to a specific client server 160 and/or specific client station 190 as described above.
In some embodiments of the invention, last value server 140 stores and transmits the data as formatted variables instead of as raw content. Optionally, client server 160 and/or client station 190 enhance distribution by updating their content from last value server 140 instead of realtime server 150.
In some embodiments of the invention, by distributing the server tasks among multiple servers each server is able to handle its task at a maximum rate with minimal interference from other tasks. For example, in some embodiments of the invention: (a) real time server 150 receives and transmits a real time data flow to one or more clients;
(b) last server 140 updates and provides initialization values;
(c) database server 130 handles applications which can be dealt with at a lower rate such as logging in to the system, reports and queries which are not following an external dictated rate; and
(d) client server 160 handles the update of the contents of a single internal buffer and transmission of the content to multiple standard client stations 180 (for example by broadcast or multicast).
In some embodiments of the invention, the distribution above enhances the ability of each server to support more clients at the same rate than possible without the above task distribution. For example a client server 160 based on a standard Pentium IV computer running Microsoft Windows 2000 Server software, can at least double the number of supported clients without changing any hardware components.
Alternatively or additionally, the server distribution above enhances the ability of each server to perform its tasks at a rate greater than possible without the above task distribution. For example allowing updating the data displayed on mobile phones at least twice as fast as without the enhancement.
Further alternatively or additionally, the server distribution above reduces the delay time between the actual creation of the data and its reception by the clients, such that a client
can respond to the data with a greater probability that the values shown on the display of client station 180 are still correct.
In some embodiments of the invention, multiple servers can be connected in parallel instead of a single server of the servers shown in Fig. 1. For example, as mentioned above, multiple client servers 160 can be connected in parallel to accept and distribute the realtime data flow to different groups of clients.
Fig. 4 is a schematic illustration of a client server data distribution system 400 according to an exemplary embodiment of the invention. In some embodiments of the invention, a distribution node 410 replaces last server 140 and realtime server 150 in order to enhance data distribution. Distribution node 410 receives the full data stream from receiver server 120 and buffers the information in a multi-dimensional array for quick access as described below. Distribution node 410, records in a separate multi-dimensional array a list of all users logged into distribution node 410 and indexes to the information array of the data required by each user. The use of two multi-dimensional arrays allows storing and retrieving the data with linear computational complexity since no searches are required.
In an exemplary embodiment of the invention, distribution node 410 transmits to each client exactly the information required by the client instead of a group of data as in some embodiments.
Fig. 5 is a schematic illustration of a multi-dimensional data array 500 according to an exemplary embodiment of the invention. In an exemplary embodiment of the invention, data received by distribution node 410 from receiver server 120 is stored in a multi-dimensional array 500, optionally enhancing retrieval of the data. In an exemplary embodiment of the invention, array 500 comprises a vector 510 that divides the data according to the group it belongs to, for example currency exchange data, NASDAQ stock data or REUTERS data. Each data group points to a vector 520 representing the distinct variables of the group, for example the values of specific stocks at the NASDAQ exchange. A different hierarchy or a non-hierarchical arrangement method may be used as well. In an exemplary embodiment of the invention, each variable in vector 520 comprises a pointer to a circular array 530 with a selected number of values for the variable. If more than the selected number of values are received the first values to be received are overwritten. At any moment array 500 references circular arrays 530 with the last values received for each variable of each group. In some embodiments of the invention, all received variables are recorded in circular array 530. Alternatively, only every tenth value or only a value received every half second, since if the
rate of change is greater than the retrieval rate in a small buffer (e.g. holding 10 values), there is no significance in updating the buffer faster than the retrieval rate.
In some embodiments of the invention, circular array 530 stores one or more values for a single variable. Optionally, some circular arrays store values for multiple variables together. Fig. 6 is a schematic illustration of a multi-dimensional data array 600 according to an exemplary embodiment of the invention. In order to simplify distribution of the data to clients 180 and clients 190, distribution node 410 keeps a multi-dimensional array 600 of the client data. In an exemplary embodiment of the invention, every user that logs on to distribution node 410 receives a user ID. For each such user ID (or definition of a set of data values), a list of pointers and/or other information for accessing the data (e.g., in array 500) is provided. In an exemplary embodiment of the invention, data array 600 comprises a vector 610 with an entry for each user ID pointing to a variable sized vector 620. Variable sized vector 620 points to a list 630 for every variable that the client is interested in receiving. List 630 gives the position in array 500 of the circular array 530 for the required variable. Thus, in an exemplary embodiment of the invention, the data for each user is provided in a non-hierarchical manner. Optionally, a user ID is used to collect billing information, geographical information and/or other information about a user.
In an exemplary embodiment of the invention, list 630 comprises one or more of the following details: 1. the group index in vector 510 for the variable.
2. the variable index in vector 520 for the variable.
3. the request mode for transmission of the data in circular array 530 to the client; this value specifies if to transmit all values in circular array 530, only some of the values, only the last arrived value, all modified values since last transmission to the client or any other rule. This may be useful, for example, when requesting data to a cellular telephone with low update rate, as compared to a WWW client with a high update rate and/or for different presentation methods.
4. the number of values to return in modes that return more than one value for a variable.
5. an index to the last value in the circular array that was received by the client.
In an exemplary embodiment of the invention, a client that is authorized to join data distribution from a distribution node 410 transmits an initialization request listing the data variables it requires. Such a request may be provided in an off-line manner as well, for
example, during registration using a WWW site, for example. Alternatively to preparing a separate variable list for each user, some users may use standard lists, which include groups of variables, each such standard list, for example having a "user id". A user may also connect multiple times, each time asking for a different group of variables. In an exemplary embodiment of the invention, during operation, distribution node 410 creates an entry in vector 610 for the client pointing to a vector 620 with a list of the requested data variables and begins updating the client with the requested data variables. Optionally, a client can transmit a request to add variables or remove variables from vector 620 in order to change the variables it receives. In an exemplary embodiment of the invention, vectors 610, 620, 510 and 520 serve as hash tables, which maintain sorted indexes to allow rapid retrieval of the required pointers based on a supplied key value. Alternatively, other addressing methods are used.
In an exemplary embodiment of the invention, distribution node 410 is able to supply data to standard clients 180 and/or smart clients 190. Optionally, smart clients 190 are updated directly from distribution node 410, whereas standard clients 180 are represented by a client server 420 (Fig. 4). In an exemplary embodiment of the invention, client server 420 is similar to client server 160 in representing a group of standard client stations 180, which have limited processing ability, for example mobile telephone clients. Optionally, client server 420 does not need a last buffer as described for client server 160 since distribution node 410 supplies client server 420 with the data required by standard clients 180.
In some embodiments of the invention, client server 420 retrieves a fixed set of variables from distribution node 410. The fixed set of variables is used to prepare a limited set of possible presentation pages, which are supplied to multiple standard clients 180 upon request. In some embodiments of the invention, distribution node 410, supplies the data in a format requested by the user, for example plain text or HTML, for example by fitting the values into slots predefined in templates. Optionally, different user are supplied data in different formats and/or using different templates.
In some embodiments of the invention, a distribution node 410 typically stores data representing thousands of different groups of data (e.g., users) with tens of thousands of distinct variables. Additionally, for each variable distribution node 410 typically stores between one to a thousand different values. Optionally, the above exemplary range is an indication of the amount of data typically supported by distribution node 410 in supporting the distribution of economic data, for example currency exchange rates and stock values. However
larger amounts or smaller amounts of data may be supported in distribution of economic data or in distribution of data of other types. It should be noted that there may be considerable overlap between the lists of users, for example, two groups of data may have an overlap of greater than 50%. In some embodiments of the invention, storage for all groups and variables are allocated when initializing distribution node 410 in order to minimize the need for adjustments which would slow down the system when a variable appears for the first time.
It should be noted that in an exemplary embodiment of the invention, as a result of using a storage and retrieval method as described above, the addition of clients being served by distribution node 410 linearly adds to the computation load on distribution node 410 instead of a greater rate of growth as in standard database servers. Alternatively or additionally, in some embodiments as the client data array 600 directly points to the values of the variable, the rate of retrieval of data from distribution node 410 to a client is not dependent on the number of values held by distribution node 410. Optionally, this reduces inter-client interference.
In some embodiments of the invention, a distribution node 410 supports multiple clients without the need for interaction with any other server. As a result multiple distribution nodes 410 can be used to allow system 100 to" support a substantially unlimited number of clients. Optionally, each distribution node 410 receives the same data stream from receiver server 120 and independently supports clients assigned to it. If the load gets too great on a specific distribution node another distribution node can be added and the clients divided between them. Optionally, different distribution nodes support different geographical areas.
Optionally, a distribution node includes a table or vector mapping the input data stream to the locations in the circular buffers. O a hash table is used. In an exemplary embodiment of the invention, a typical single distribution node comprises a dual processor server PC, comprising Intel 2.4Ghz CPUs and 512MB memory can support several thousand realtime clients without degradation in the quality of service of the clients.
It should be noted that in an exemplary embodiment of the invention, in distribution node 410, each variable keeps a separate circular array 530 of a pre-selected size thus optimally using the memory available on distribution node 410. Additionally, as a result of keeping a separate circular array 530 the rate of change of one variable has no effect on other variables such as when using a common realtime buffer. In some embodiments of the invention, the size of circular array 530 is selected according to the character of the variable,
for example its rate of change or popularity for display by clients. Optionally, a variable that changes once a day stores less last values in circular array 530 than a variable that changes every second, since a client is able to keep up with the changes without distribution node 410 saving the values for the client. Alternatively or additionally, the size of circular array 530 may be updated during transmission based on client requests.
As an example of a high change rate of a stock, Microsoft's stock traded on the NASDAQ, may at some intervals be updated more than 30 times per second. In a common realtime buffer a stock being updated at such a rate would dominate the buffer overwriting other data before it is supplied to the clients, in distribution node 410 there would be no problem.
Optionally, arrays 500 and 600 are used to determine when a user should be updated. In one scheme, users receive a blank answer if no variables were updated. For example, a hash value of the last sent data vector may be stored per user. If the current data, when hashed, has the same hash value as the stored value for a user, a much shorter, negative, answer is sent. In another scheme, when a variable is changed, each user whose list points to that variable is marked, and a message with the updated data or data set is sent to such users. Alternatively, such a setting may be used to indicate that a next request by the user should be answered.
The present invention has been described sing non-limiting detailed descriptions of embodiments thereof that are provided by way of example and are not intended to limit the scope of the invention. It should be understood that features and/or steps described with respect to one embodiment may be used with other embodiments and that not all embodiments of the invention have all of the features and/or steps shown in a particular figure or described with respect to one of the embodiments. It is noted that some of the above described embodiments may describe the best mode contemplated by the inventors and therefore include structure, acts or details of structures and acts that may not be essential to the invention and which are described as examples.
Structure and acts described herein are replaceable by equivalents which perform the same function, even if the structure or acts are different, as known in the art. Therefore, the scope of the invention is limited only by the elements and limitations as used in the claims. When used in the following claims, the terms "comprise", "include", "have" and their conjugates mean "including but not limited to".
While the application has been described as methods, it is meant to also encompass apparatus for carrying out the invention, for example, suitably programmed servers and client computers and/or media having suitable software thereon, for example, diskettes and
computer RAM.