Alphabet – Hannes Gredler, Santosh Pallagatti Kotrabasappa, Deepak J, Pravin S. Bhandarkar, Rtbrick Inc

Abstract for “System and methods to define object memory format in memory, store for object interactions and manipulation, and exchange it in distributed network devices.”

“The present disclosure describes systems and methods for creating a data store format to store state information related to border gate protocol (BGP), routing information base entries (RIB), BGP Neighbor Tables (IS-IS), adjacencies. Link-State databases, Interface information, Chassis info, etc. in a binary format. Brick data stores (BDS) can be used to define objects, tables properties and attributes for applications. The configuration files are expressed in Java Script Object Notation, JSON. Data format can be consistent across files, inter-process communication and in-memory representations.

Background for “System and methods to define object memory format in memory, store for object interactions and manipulation, and exchange it in distributed network devices.”

“Distributed network can use a number of nodes interconnected through a network to exchange or process networking information. The distributed networking system may use different methods to represent and manipulate networking information. This can lead to increased complexity.

“In a brick data-store (BDS), in-memory databases based system (hereinafter referred as the “BDS system?” In-memory databases are kept state information related to border-gate protocol (BGP), routing information base entries (RIB), BGP Neighbor tables, intermediate system-intermediate (IS-IS), adjacencies and Link-State Databases. Interface information, Chassis info, etc. Brick Data Store Format is used for object representation in memory as well as in the BDS Database. All state transactions (tables, objects and attributes, etc ) are handled by the database in the same way as a SQL database.

The BDS system offers a unified memory layout which significantly reduces complexity for each application logic to serialize or de-serialize data. BDS also allows for strong abstraction of the infrastructure, which allows a suite utilities to be built around BDSF and made available to end-user applications. This allows developers to concentrate on the application logic that is built around a uniform object format and utilities.

“In certain embodiments, tables and table properties can be defined using configuration files in Java Script Object Notation, (JSON), which allows for easy specification of dynamic objects. The BDSF data representation is consistent across all inter-process communications, files, and in-memory. This allows for easy access to information both in memory and during processing.

The BDS system defines an object table, an item container, and an attribute binary format. This uniquely represents the information within the system over inter-process communication and in-memory databases. BDS provides an uniform representation of objects within the system and allows applications to use it to understand and use that information. This greatly reduces the amount of code required to read and create information throughout the system. The object format is a binary file format that has sufficient information to allow it to be organized with object tables or databases to improve its ability to capture system state. The BDS system can be used to optimize memory layout and index map. This allows for an instance to be indexed in multiple flavors of lookup trees, each with additional information. Some embodiments allow the system state to be stored on off-board servers that have large storage capacities. This, along with the temporal ordering information, can make it possible to view and replay the system’s state at any time. The BDS system can provide object consistency across objects tables by using a modified version IS-IS routing protocol. This ensures table synchronization. Maintaining synchronization in loosely coupled systems, such as those using IS-IS routing protocols, can be difficult if you don’t provide object consistency.

“Some embodiments of the BDS system provide a bit compression technique to recognize objects in the table. This ensures that tables are synchronized across all modules. The BDS system can be used to recover the system after a restart of a module. The queue runner eliminates the need to keep track of timer points or handles. It is possible to quickly recover from a restart using a snapshot stored on disk. The BDS system can be used to indicate add/delete, or a delta modification in an object. With the help of plug ins registers, applications receive notifications about any operation that is made to the table. A diff map application may be used in some embodiments to determine the current state of the system at any given moment without over-loading the memory. The BDS system is a unique way to store indexes as well as its object map in some embodiments. One index can be used for all trees in a table. This is a good way to reduce memory footprint as each tree won’t have a different pointer to data. Separate pointers for key and trees index would also be in warm cache, which allows for faster lookups.

In-memory storage systems that are coupled to processors can be used in one embodiment of a system for storing objects more efficiently in memory. The system also includes a first memory location with a predetermined memory format that stores content of an object. It also includes an object map. This object map contains an attribute mask and an off-set list to locate an attribute among a number of attributes. The attribute mask is a bit vector that describes an encoding of each object’s attributes. A second location of memory is also included in the system. It stores an index map of indexes for one or more objects. The index map also includes an index to the object’s map.

“In some embodiments, the system also includes a table that is stored in a third place of memory with a predetermined format. The table may also be configured to contain at least one index map node. The index map may contain a key and an offset list for each table node. The index map can be further configured to allow for a lookup of an object in the table and to point to the object map. Some embodiments include a length field that identifies a fixed length in bits within the first predetermined storage format.

“In some embodiments, one or more of these fields can be stored in the first predetermined memory form for an object or object map: the attribute mask length, which indicates the number of bytes in the attribute mask; the sequence number, which indicates a version of an object; and the offset count, which indicates the number of objects. Some embodiments store data for the object in binary format in the predetermined memory format. The system may also include a fourth location with a predetermined format that stores a diffmap associated with the object map. This diff map includes a diffmap attribute mask and a list listing all attributes from the object’s plurality that have changed. The system may also include a fifth location with a fifth format that stores diff map index maps associated with the diffmap, where indexes to the diffmap are stored. The index map of indexes for one or more objects may include an index to the diffmap index map. Some embodiments include a Java Script Object Notation (JSON) format in the first and second predetermined memory formats. The system may also include a sixth location of storage that contains a sixth predetermined format memory. This is used to communicate a message to another processor. It includes information about at least one of the following: replication of an object or table synchronization.

“One aspect of the invention is a computer-readable storage medium that contains instructions. These instructions, when executed by the computer, cause the computer execute a method to efficiently store objects in memory. The object map includes an object mask and an offset list to locate an attribute of a plurality. The attribute mask includes a bit vector that describes an encoding of the object’s attributes. Further, the method includes the storage of an index map of indexes for one or more objects at another location in the in-memory memory system in a second memory format. The index map is an index to the object map.

“In some embodiments, the method also includes the storage of a table at a third location in the in-memory memory system in a pre-determined format. The method may also include storing at most one node that contains the index map within the table. The method may also include a lookup of an object in the table and a pointer at the object map. Some embodiments include storing the object’s content and an object map at a predetermined location in memory. This includes storing a length field that indicates a fixed length in bits in the predetermined memory format. Some embodiments include storing an object’s content and an object map at the first location of memory in an In-Memory System in a predetermined format. These fields can be one or more of these: an attribute mask length that indicates the number of bytes in the attribute mask, sequence number indicating the version of the object, an offset count that indicates the number of offsets within the object. Some embodiments allow for storage of object content and an object map at the first location of memory in an In-Memory System in a predetermined format.

“One aspect of a system to store objects more efficiently in memory of an In-Memory Storage System includes an object table and container and an attribute binary format that uniquely represent the information in the system across Inter Process Communication, In-Memory Database and a filesystem. The system provides a uniform representation of objects in the system. Applications can interpret and use this information. It also allows for de-serialization and serialization of information which significantly reduces the amount of code required to read and create information throughout the system. The object format can be a binary format that has sufficient information to allow the organization of this around data bases or object tables. The system has an efficient memory layout that includes the object map and index map. This allows for instances to be indexed into multiple flavors of lookup trees, each with additional information. The system state can be stored on off-board servers that have large storage capacities. This, along with the temporal ordering of information, can allow for the viewing and replaying of the system’s current state at all times. Some embodiments include object consistency across objects tables. This is done by using a modified version ISIS routing protocol to ensure table sync. The system may use bit compression to acknowledge objects in the table. This ensures that tables are synchronized between modules. The system can be used to recover system from a restart of a module using a queue runner in some embodiments. The queue runner may eliminate the need for pointers or timers and make it easy to recover from a restart by using a snapshot saved on a hard drive.

“In certain embodiments, the system can indicate add/delete and a delta change in an item with plug-ins. With the help of plugs that are registered via an internal publish-subscribe bus, applications can be notified about any operation on the table. The system can capture all system states and make them accessible to the end-user. In some cases, it also retains updates as deltas over an underlying model. A diff map can be used in some embodiments to store the current state of the system at any given instance. The system may store indexes as well as its object map in some instances. Each tree in the table can have a single index and an object map. This reduces memory footprint as each tree does not have a unique pointer to the data. This can also speed up table lookup because separate pointers to key would be in hot cache.

“The following sections of the specification with their respective contents can be useful for reading the descriptions of various embodiments:”

“Section A” describes a computing environment and network environment that may be helpful in the practice of embodiments.

“Section B” describes systems and methods that can be used to create brick data stores (BDS) in memory databases.

“Section B describes systems and methods to represent tables and objects in BDS databases.”

“Section D” describes various embodiments of BDS memory formats that are used in the BDS database.

“Section E” describes various embodiments of systems or methods to represent tables and index mappings in the BDS database.

“Section F” describes various embodiments of systems or methods that provide utilities through the BDS database.

“A. Computing and Network Environment.”

“Before we discuss specific embodiments of this solution, it might be useful to describe aspects such as the operating environment and associated system components (e.g. hardware elements) in relation to the methods or systems described herein. Referring to FIG. FIG. 1A shows an example of a network environment. The network environment includes one to three clients 102a-102n (also known as client(s), 102 and client(s), 102), client node(s), 102 and client(s), 102), client computer(s), 102, and client machine(s), 102), client client(s), 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102. Client device(s), 102. Endpoint(s), 106 or remote machine(s). A client 102 can be used as both a client node that seeks access to server resources and as a server that provides access to server resources for other clients.

“Although FIG. FIG. 1A depicts a network of 104 between clients 102, servers 106. However, clients 102 may be on the same network (104). Some embodiments may have multiple networks 104 connecting the servers 106 and clients 102. One of these embodiments may have a network 104. A network 104 could be a private network, while a network (not shown), may be public. A network 104 could be a private network, while a network 104.1 may be a public network. A public network. Networks 104 and104 are also possible in another embodiment. Both networks 104 and 104 may be private networks.”

“The network 104 can be connected via either wired or wireless links. Digital Subscriber Line (DSL), coaxial cables lines or optical fiber lines can all be connected via wired links. Wireless links can include BLUETOOTH and Wi-Fi (Worldwide Interoperability for Microwave Access) as well as an infrared channel, satellite band, or BLUETOOTH. Wireless links can also include any cellular network standard used to communicate between mobile devices. This includes standards that are 1G, 2G or 3G. If the network standards meet a specified or set of standards, they may be considered one or more generations of mobile telecommunications standards. The 3G standards, for example, may correspond to the International Mobile Telecommunications-2000 (IMT-2000) specification, and the 4G standards may correspond to the International Mobile Telecommunications Advanced (IMT-Advanced) specification. AMPS, GSM and UMTS are some examples of cellular network standards. Cellular network standards may use various channel access methods e.g. FDMA/TDMA/CDMA, SDMA. Different types of data can be transmitted using different standards and links in some embodiments. Other embodiments allow the transmission of identical data via different standards and links.

The network 104 can be any type or form of network. The network 104’s geographical coverage can vary greatly. It could be a body-area network (BAN), personal area network, or a local-area network. Intranet, metropolitan area network (MAN), wide area network(WAN), or Internet. The network 104’s topology can be any type and could include any combination of: bus, star or ring, tree, point-to-point, bus or star. The network 104 could be an overlay network that is virtual and sits on top one or more layers from other networks 104?. The network 104 can be any network topology known to ordinary skill in the art and capable of supporting operations. The network 104 can use different protocols and layers, such as the Ethernet protocol, TCP/IP, the ATM (Asynchronous Transfer Mode), SONET (Synchronous Optical Networking), or SDH (Synchronous Digital Hierarchy). TCP/IP’s internet protocol suite can include the application layer, transport layer and internet layer (including IPv6). Network 104 could be classified as a broadcast network or a telecommunications network. It also may include a data communication network or computer network.

“In some embodiments, multiple servers may be logically grouped 106. One of these embodiments may refer to the logical grouping of servers as either a server farm 38, or a machine farm 38. Another embodiment may allow the servers 106 to be geographically dispersed. A machine farm 38 can be managed as one entity in other embodiments. Another embodiment of the machine farm 38 may include a number of machine farms 38. Each machine farm 38 may contain multiple machines farms 38.

In one embodiment, the servers 106 of the machine farm 38 could be stored in rack systems with high density and associated storage systems. They would then be located in an enterprise-level data center. This embodiment consolidates the servers 106 to improve system management, data security, and system performance. Servers 106 and high-performance storage systems are located on localized high-performance networks. The centralization of the servers 106, storage systems, and their coupling with advanced system management tools allows for more efficient use.

“Servers 106 and 106 from each machine farm 38 don’t need to be physically close to other servers 106 in the machine farm 38. The machine farm 38 group of servers 106 may be connected using either a metropolitan-area (MAN) or wide-area (WAN) connection. A machine farm 38 could include servers 106 located on different continents, in different areas of a country, state, city or campus. The data transmission speeds between the server 106 of the machine farm 38 can increase if they are connected via a local-area networking (LAN) connection, or another type of direct connection. A heterogeneous machine farms 38 could also include servers 106 that operate according to one type of operating system and one or two other servers 106 that run one or several types of hypervisors. Hypervisors can be used in these embodiments to simulate virtual hardware, partition and virtualize physical hardware, as well as to execute virtual machines that allow access to computing environments. Multiple operating systems may run simultaneously on the host computer. Native hypervisors can run directly on the host machine. VMware ESX/ESXi, made by VMWare, Inc. of Palo Alto, Calif., and the Xen hypervisor, which is an open-source product whose development was overseen by Citrix System, Inc., as well as the HYPERV hypervisors that Microsoft or other companies provide. Hosted hypervisors can run in an operating system at a second level. VIRTUALBOX and VMware Workstation are two examples of hosted hypervisors.

“Management of the machine farms 38 could be decentralized. One or more servers 106 could be composed of components, subsystems, and modules that support one or several management services for the machine farms 38. One or more servers 106 are used to manage dynamic data. This includes techniques for managing failover, replication and increasing the resilience of the machine farm. Each server 106 can communicate with both a persistent store or, in certain embodiments, a dynamic store.

“Server106” may be a file, application, web, proxy, server, firewall, gateway, gateway, virtualization, deployment, SSL VPN server or firewall. The server 106 can be called a remote machine, or a node in one embodiment. A plurality of nodes (290) may be located in the path between two communicating servers.

Referring to FIG. “Referring to FIG. 1B, a cloud computing ecosystem is depicted. Client 102 may have access to one or more resources through a cloud computing environment. One or more clients 102a-102n may be part of the cloud computing environment. They can communicate with the cloud 108 via one or several networks 104. Clients 102 could include thick clients, thin client, or zero clients. Even if the client is disconnected from servers 106 or cloud 108, a thick client can still provide some functionality. To provide functionality, a thin client or zero client might depend on the connection with the cloud 108 and server 106. Zero clients may depend on the cloud108, other networks 104, or servers 106 for operating system data retrieval. The cloud 108 could include back end platforms such as servers 106, storage, data centers, or server farms.

“Cloud 108 can be either public, private or hybrid. Public clouds could include public servers106 that are managed by third parties for clients 102 or their owners. Servers 106 could be located in remote locations, as described above. The servers 106 may be connected over public networks to other public clouds. Private clouds could include servers 106 that are owned by clients 102. Private clouds can be connected to servers 106 via a private network. Hybrid clouds (108) may connect to both public and private networks 104 and servers106.

“Cloud 108 may include a cloud-based delivery, e.g. Software as a Service 110, Platform as a Service 112, and Infrastructure as a Service 114. IaaS can refer to renting infrastructure resources for a specific time period. IaaS providers can offer large amounts of storage, networking, servers, or virtualization resources. This allows users to scale up quickly and access more resources as they need them. IaaS may include infrastructure and services such as OVH HOSTING, Montreal, Quebec, Canada, AMAZON Web Services, Amazon.com, Inc., Seattle, Wash., Rackspace US, Inc., San Antonio, Tex., Google Compute Engine, Google Inc., Mountain View, Calif., RIGHTSCALE, Inc., Santa Barbara, Calif., and WINDOWS AZURE provided by Microsoft Corporation of Redmond, Wash., Google App Engine, Google Inc., and HEROKU, Heroku, Inc. WINDOWS AZURE, provided by Microsoft Corporation of Redmond, Wash., Google App Engine, provided by Google Inc., HEROKU provided By Heroku, Inc. of San Francisco, Calif. These are examples of PaaS. They may provide the same resources as PaaS, such as storage, networking, servers, virtualization, operation system, middleware, runtime resources, and operating system resources. SaaS providers can offer additional resources, such as data and application resources, in some instances. SaaS includes GOOGLE APPS offered by Google Inc., SALESFORCE offered by Salesforce.com Inc. San Francisco, Calif. or OFFICE 365 offered by Microsoft Corporation. Data storage providers may also be included in SaaS, for example. DROPBOX provided Dropbox, Inc., San Francisco, Calif., Microsoft SKYDRIVE provided Microsoft Corporation, Google Drive provided Google Inc., and Apple ICLOUD provided Apple Inc., Cupertino, Calif.

Clients 102 can access IaaS resources using one or more IaaS standard, such as Amazon Elastic Compute Cloud, Open Cloud Computing Interface, Cloud Infrastructure Management Interface, or OpenStack standards. Clients may be able to access resources via HTTP using some IaaS standards. These standards may use the Representational state Transfer (REST), Simple Object Access Protocols (SOAP) protocols. Clients with 102 clients may have access to PaaS resources using different PaaS interfaces. Some PaaS interfaces may use HTTP packages, JavaMail APIs, Java Data Objects(JDO), Java Persistence APIs (JPA), Python APIs and web integration APIs. These APIs can be used for various programming languages, such as Rack for Ruby, WSGI For Python, PSGI for Perl or any other APIs that are built on REST or HTTP, XML or other protocols. Clients 102 can access SaaS resources via web-based user interfaces provided by a browser (e.g. GOOGLE CHROME and Microsoft INTERNET Explorer are some examples of SaaS resources that clients 102 can access. Clients 102 can also access SaaS resources via smartphone or tablet apps, such as Salesforce Sales Cloud or Google Drive app. Clients 102 can also access SaaS resources via the client operating system. This includes, e.g. Windows file system for Dropbox.

“In certain embodiments, access may be authenticated to IaaS or PaaS resources. A server or authentication server might authenticate a user using security certificates, HTTPS, and API keys. API keys can include different encryption standards, such as Advanced Encryption Standard, (AES). “Data resources can be sent via Transport Layer Security (TLS), or Secure Sockets Layers (SSL).

“The client102 and server106 can be deployed on any type of computing device and/or executed from it, e.g. A computer, network device, or appliance that can communicate on any type of network and perform the operations described herein. FIGS. FIGS. 1C and 1D show block diagrams of a computing unit 100 that can be used to practice an embodiment of client 102 or server 106. FIGS. 1C and 1D show that each computing device 100 has a central processing module 121 and a main storage unit 122. FIG. FIG. 1C shows that a computing device 100 can include a storage device 128, a installation device 116 and a network interface 118. Display devices 124 a-124 n are shown. A keyboard 126 is also shown. A mouse. Without limitation, the storage device 128 can include an operating system, software, or a software of a snapshot linking system 120. FIG. FIG. 1D shows that each computing device 100 can also have additional elements, e.g. A memory port 103, bridge 170, input/output devices 130a-130n (generally referred by using reference number 130) and a cache memory 140 in communications with the central processing unit.

“The central processing module 121 is any logic circuitry which responds and processes instructions from the main memory device 122. A microprocessor unit is often used to provide the central processing unit (121) in many embodiments. Those manufactured by Intel Corporation, Mountain View, Calif., and those manufactured at Motorola Corporation, Schaumburg (Ill.); the ARM processor with TEGRA system on a Chip (SoC), manufactured by Nvidia, Santa Clara, Calif. ; the POWER7 process, manufactured by International Business Machines, White Plains, N.Y., or those manufactured at Advanced Micro Devices, Sunnyvale, Calif. These processors or any other processor that can operate as described herein may be used to create the computing device 100. The central processing unit (121) may use instruction level parallelism or thread level parallelism. It can also utilize different levels of cache and multi-core processors. Multi-core processors may contain multiple processing units within a single computing unit. Multi-core processors include, for example, the AMD PHENOM IIX2, the INTEL Core i5 or INTEL CPU i7.

“Main memory unit (122) may contain one or more memory chips that can store data and allow any storage location to directly be accessed by the microprocessor. 121 Main memory unit 122, which may be volatile, can store more data than 128 memory. The main memory unit 122 can be Dynamic random-access memory (DRAM), or any variants thereof, Burst SRAM/SynchBurst SRAM(BSRAM), Fast Page Mode (FPM) DRAM, Extended Data Output RAM/EDO RAM, Extended Data Output (EDO DRAM), Burst Extended DRAM/BEDO DRAM), Single data rate synchronous DRAM/SDR SDRAM), Double data rate SDRAM/DDR SDRAM), Direct Rambus RAMbus DRAM/DRDRAM (DRDRAM/XDRDRAM/DRDRAM (DRDRAM), and DRAM/DRDRAM (DRDRAM), DRAM/DRDRAM (DRDRAM), DRAM/DRDRAM (DRDRAM), DRAM/DRDRAM (DRAM), DRAM/DRDRAM (DRDRAM), DRAM/DR DRAM/XDR DRAM/DRDRAM (DRDRAM), DRAM/DRDRAM (DRDRAM), Direct Rambus DRAM/DRAM (DRDRAM), DRAM), or DRAM adRAM), In some embodiments, the main memory 122 or the storage 128 may be non-volatile; e.g., non-volatile read access memory (NVRAM), flash memory non-volatile static RAM (nvSRAM), Ferroelectric RAM (FeRAM), Magnetoresistive RAM (MRAM), Phase-change memory (PRAM), conductive-bridging RAM (CBRAM), Silicon-Oxide-Nitride-Oxide-Silicon (SONOS), Resistive RAM (RRAM), Racetrack, Nano-RAM (NRAM), or Millipede memory. You can use any of the memory chips described above, or any other memory chips that are capable of operating in accordance with this invention. FIG. FIG. 1C shows how the processor 121 communicates via a system bus 150 with main memory (described below). FIG. FIG. 1D shows an embodiment of a computing system 100, in which the processor communicates with main memory via a memory port. FIG. FIG. 1D may show DRDRAM as the main memory 122.

“FIG. “FIG. Other embodiments of the main processor 121 connect with cache memory 140 via the system bus 150. Cache memory 140 is usually faster than main memory 122 in response times and is typically supplied by SRAM (BSRAM), EDRAM or EDRAM. FIG. 1D shows how the processor 121 communicates via a local bus 150 with I/O devices 130. There are many buses that can be used to link the central processing unit 121 with any I/O device 130. These include a PCI bus or a PCIX bus or a PCI Express bus or a NuBus. In embodiments where the I/O device 124 is a video monitor, the processor 121 can use an Advanced Graphics Port to communicate with the display (124) or the I/O controller (123 for the display 124) FIG. FIG. 1D shows an example of a computer 100 where the main processor 121 can communicate directly with I/O device 130b or other processors. via HYPERTRANSPORT or RAPIDIO communications technology. FIG. FIG. 1D shows another embodiment where local buses and direct communication are combined: processor 121 uses a local interconnect bus to communicate with I/O devices 130a while also communicating directly with 130b.

The computing device 100 may contain a variety of I/O devices 130a-130n. Trackpads, trackpads and trackballs can be used as input devices. Video displays, graphical displays and speakers can be output devices.

“Devices 130a-130n may contain multiple input or output devices such as Microsoft KINECT or Nintendo Wiimote, Nintendo WII U GAMEPAD or Apple IPHONE. Some devices 130 a-13 n can combine some inputs and outputs to allow gesture recognition inputs. Devices 130 a-130n allow facial recognition, which can be used for authentication or other commands. Devices 130 a-130n provide voice recognition and inputs such as Microsoft KINECT by Apple, SIRI to IPHONE by Apple or Google Now.

“Additional devices 130a-130n can be used as input or output devices. They include haptic feedback devices and touchscreen displays. Multi-touch screens, touchpads and touch mice may use different technologies to sense touch. These technologies include capacitive (surface capacitive), projected capacitive (PCT), resistive (infrared), waveguide, dispersive touch (DST), in cell optical, surface acoustic (SAW), bendingwave touch (BWT) or force-based sensing technology. Multi-touch devices can allow for two or more contact points with the surfaces, which allows advanced functionality such as pinch, rotate, scroll or other gestures. Some touchscreen devices, such as Microsoft PIXELSENSE and Multi-Touch Collaboration Wall may have larger surfaces like on a table-top, or on a wall. They may also interact with other electronic gadgets. A group of I/O devices 130a-130n, display devices 124-64 n and some other devices could be augment reality. An I/O controller 123 may control the I/O devices as shown in FIG. 1C. 1C. An I/O device can also be used to store and/or install the computing device 100. Other embodiments may also provide USB connections (not illustrated) for receiving handheld USB storage devices. An I/O device 130 can be used as a bridge between system bus 150, external communication buses, e.g. A USB bus, a SCSI Bus, a FireWire Bus, a FireWire Bus, an Ethernet Bus, a Gigabit Ethernetbus, a Fibre Channel Bus, or a Thunderboltbus.

In some embodiments, display devices 124a-124n can be connected to I/O control 123. Display devices include liquid crystal displays (LCD), thin-film transistor LCD (TFTLCD), blue-phase LCD, electronic papers, (e-ink), and liquid crystal on silicon displays (LCOS). They may also be connected to I/O controller 123. Some examples of 3D displays include: Stereoscopy, polarization filter, active shutters or auto stereoscopy are all possible uses for 3D displays. Display devices 124a-124n can also be head-mounted displays (HMD). Display devices 124 a?124 n and the corresponding I/O control units 123 can be controlled or have hardware support OPENGL, DIRECTX API, or other graphics libraries in some embodiments.

“In some instances, the computing device 100 can connect to multiple display devices (124 a-124n), which may be the same type or different. Any of the I/O device 130 a?130 n or the I/O controller123 can include any type or combination of hardware, software, and hardware to enable, support, enable, or provide for multiple display devices 124a?124n. The computing device 100 could include any type or form of video adapter or video card, driver and/or library to connect, communicate, connect, or otherwise use multiple display devices. Software may be developed and built to work with another computer’s display device 124a. One example is that an Apple iPad can connect to a computing device 100, and the display of the 100 may be used as an additional screen. This could allow the user to use the 100’s display as an extended desktop. A computing device 100 can be configured to support multiple display devices 124a-124n. One who is skilled in the art will appreciate and recognize the many ways that this configuration may be possible.

“Referring to FIG. “Referring again to FIG. One or more hard drives, or redundant arrays or independent disks, for storing operating systems or software. One example of a storage device 128 is a hard disk drive (HDD), optical drive, DVD drive or BLU-RAY driver; solid-state drive(SSD); USB flashdrive; or any other device that can store data. Many storage devices can include both volatile and nonvolatile memories. This includes solid-state hybrid drives, which combine hard disks with solid states cache. One storage device 128 could be read-only, non-volatile or mutable. One storage device 128 could be internal and connect via a bus 150 to the computing device 100. One storage device 128 can be external and connects to the computing device 100 via an interface device 130. This external bus provides an external bus. One storage device 128 can connect to the computing devices 100 via the network interface 118. This network 104 includes, e.g. the Remote Disk For MACBOOK AIR from Apple. Client devices 100 may not need a non-volatile data storage device 128. They may also be thin clients or zero clients. A storage device 128 can also be used to install software or programs 116. The operating system and software can also be run from a bootable media, such as a CD or DVD. KNOPPIX is a bootable CD that runs GNU/Linux. It can be downloaded from knoppix.net.

Client device 100 can also download software from an application distribution platform. The App Store for iOS, provided by Apple, Inc., is the Mac App Store provided to Apple, Inc., GOOGLE LAY for Android OS provided o Google Inc., Chrome Webstore CHROME OS provided o Google Inc., Amazon Appstore for Android OS, KINDLE FIRE, provided by Amazon.com, Inc., are all examples of application distribution platforms. A repository of applications may be included in an application distribution platform. This can be on a server (106) or cloud 108 that clients 102 a-102n can access via a network (104). A distribution platform could include applications developed by different developers. An application distribution platform allows users of client devices 102 to select, buy and/or download applications.

“Moreover, the computing device 100 can include a network interface 118 that allows it to connect to the network 104 via a variety connections such as standard telephone lines LAN/WAN links (e.g. 802.11, T3, Gigabit Ethernet and Infiniband), broadband connections (e.g. ISDN, Frame Relay ATM, Gigabit Ethernet or Ethernet-over-SONET), ADSL, VDSL BPON, GPON or fiber optical including FiOS), or a combination of all of these connections. TCP/IP can establish connections using a variety communication protocols, such as Ethernet, ARCNET and SONET, SDH. Fiber Distributed Data Interface (FDDI), IEEE 802.21/b/g/n/ac CDMA. GSM, WiMax, and direct asynchronous connections. One embodiment shows that the computing device 100 can communicate with computing devices 100. Any type and/or combination of tunneling protocols or gateways, e.g. Secure Socket Layer, Transport Layer Security, or Citrix Gateway Protocol, manufactured by Citrix Systems, Inc., Ft. Lauderdale, Fla. The network interface 118 can include a built-in network connector, network card or PCMCIA network card. It may also contain an EXPRESSCARD networkcard, EXPRESSCARD card network card, card bus adapter and wireless network adapter. Modems, or any other device that is capable of interfacing with the computing device 100 to any network that can communicate the operations described in this article.

“A computing device 100, of the type shown in FIGS. “A computing device 100 of the type shown in FIGS. 1B and 1C can be controlled by an operating system that controls access to system resources and scheduling. Any operating system can run on computing device 100, including any version of MICROSOFT WINDOWS, Unix or Linux, and any embedded operating system. It can also run any operating system for mobile devices. WINDOWS 2000, WINDOWS Server 20022, WINDOWS CE, WINDOWS Phone, WINDOWS XP, WINDOWS VISTA and WINDOWS 7 all manufactured by Microsoft Corporation of Redmond, Wash., MAC OS, iOS, manufactured Apple, Inc. of Cupertino, Calif., and Linux, a freely available operating system, e.g. Linux Mint distribution (?distro?) Ubuntu distributed by Canonical Ltd. in London, United Kingdom. Unix or other Unix like derivative operating systems. Android designed by Google, Mountain View, Calif. Certain operating systems, such as the CHROME OS from Google, can be used on zero clients and thin clients including, for example, CHROMEBOOKS.

“The computer system 100 may include any computer system that can communicate with a computer network, such as a desktop, phone, notebook, computer, computer or telephone, netbook, ULTRABOOK or tablet, server or handheld computer, mobile telephone, smartphone, tablet or mobile computing device, media player, gaming system, mobile computing device or any other form of computing, telecommunications, or media device. The computer system 100 is equipped with sufficient memory and processor power to carry out the operations described. The computing device 100 can have different operating systems and processors depending on its configuration. Samsung GALAXY smartphones, for example, are controlled by the Android operating system, developed by Google, Inc. GALAXY phones receive input via a touch interface.

“In some embodiments, a computing device 100 may be a gaming system. The computer system 100 could include, for example, a PLAYSTATION 3 or PERSONAL PLAYSTATION PORTABLE(PSP), or a PLAYSTATION VITA manufactured by the Sony Corporation, Tokyo, Japan, a NINTENDO DS, NINTENDO 3DS, NINTENDO WII, NINTENDO WII, NINTENDO WII U manufactured by Nintendo Co., Ltd., Kyoto, Japan, and an XBOX 360 manufactured by Microsoft Corporation, Redmond, Wash

“In certain embodiments, the computing devices 100 are digital audio players such as the Apple IPOD Touch, IPOD Touch and IPOD NANO line of devices manufactured by Apple Computer in Cupertino (Calif.). Other functionality may be available for some digital audio players, such as a gaming system, or functionality that is made available by applications from a digital distribution platform. The IPOD Touch can access the Apple App Store. The computing device 100 may be a portable media player, digital audio player, or a portable media player that supports file formats such as MP3, WAV and M4A/AAC Protected AAC AIFF and.mov, H.264/MPEG-4 AVC video file formats.

“In certain embodiments, the computing devices 100 are a tablet e.g. The IPAD line of Apple devices; the GALAXY TAB series of Samsung devices; or KINDLE IRE, by Amazon.com, Inc., Seattle, Wash. The computing device 100 can also be used as an eBook reader. The KINDLE family devices by Amazon.com, and the NOOK family devices by Barnes & Noble, Inc., New York City, N.Y.”

“In some embodiments, the communication device 102 may include a combination of devices. A combination of a smartphone and a digital audio or portable media player. One example of one of these embodiments would be a smartphone. The IPHONE smartphone family manufactured by Apple, Inc., a Samsung GALAXY smartphone family manufactured by Samsung, Inc., or a Motorola DROID smartphone family. Another embodiment of the communications device102 is a computer or laptop that has a web browser, microphone, and speaker system. a telephony headset. These communications devices 102 can be web-enabled to receive and initiate calls. A laptop or desktop computer may also be equipped with a webcam, or another video capture device, that allows for video chat and video calling.

“In some embodiments, one or more machines 102 and 106 are monitored as part of network management. One of these embodiments may identify the status of a machine by identifying load information (e.g. the number and type of processes running on it, their CPU utilization, memory usage), port information (e.g. the number and addresses of the available communication ports), or session status (e.g. the duration and type and whether they are active or inactive). Another embodiment of this type of information can be identified using a variety of metrics. The plurality may be used at least partially to make decisions regarding load distribution, network traffic management and network failure recovery, as well as other aspects of the operations described herein. The systems and methods described herein will make it easy to see aspects of the components and operating environments mentioned above.

“B. Brick Data Store (BDS), In-Memory Database

“In a BDS-in-memory system (hereinafter called “the BDS system”), state information relating to border-gate protocol (BGP) routing information base (RIB) entries, BGP Neighbor Tables adjacencies, Intermediate System Intermediate System(ISI), adjacencies and link states is retained in an in-memory database. In-memory databases are used to store state information related to the border-gateway protocol, (BGP), routing information base entries (RIB), BGP Neighbor Tables and Intermediate System-Intermediate System, (IS-IS), adjacencies, Link State Databases, Interface information and Chassis information. The object representation is done in memory using the Brick Data Store Format (BDSF). All state transactions are handled by the database in the same way as a SQL database (using, e.g. tables, objects, and attributes ).

The BDS system offers a unified memory layout which significantly reduces complexity for each application logic to serialize or de-serialize data. BDS also allows for strong abstraction of the infrastructure, which allows a suite utilities to be built around BDSF and made available to end-user applications. This allows developers to concentrate on the application logic that is built around a uniform object format and utilities.

“In certain embodiments, tables and table properties can be defined using configuration files in Java Script Object Notation, (JSON) which allows for easy specification of dynamic objects. The BDSF data representation can be uniform over inter-process communications, file and in-memory representations. This allows for easy access to information both in memory and during processing.

The BDS system defines an object table, an item container, and an attribute binary format. This uniquely represents the information within the system over inter-process communication and in-memory databases. BDS provides an uniform representation of objects within the system and allows applications to use it to understand and use that information. This greatly reduces the amount of code required to read and create information throughout the system. The object format is a binary file format that has sufficient information to allow it to be organized with object tables or databases to improve its ability to capture system state. The BDS system can be used to optimize memory layout and index map. This allows for an instance to be indexed in multiple flavors of lookup trees, each with additional information. Some embodiments allow the system state to be stored on off-board servers that have large storage capacities. This, along with the temporal ordering information, can make it possible to view and replay the system’s state at any time. The BDS system can provide object consistency across objects tables by using a modified version IS-IS routing protocol. This ensures table synchronization. Maintaining synchronization in loosely coupled systems, such as those using IS-IS routing protocols, can be difficult if you don’t provide object consistency.

“In certain embodiments, the BDS systems provides bit compression to acknowledge objects in tables, which ensures that tables are synchronized across all modules. The BDS system can be used to recover the system after a restart of a module. A queue runner eliminates the need to keep track of timer points or handlers. It is possible to easily recover from a restart using a snapshot stored onto hard disk. The BDS system can be used to indicate add/delete and delta changes in objects with plug-ins. With the help of plug ins registers, applications receive notifications about any operation that is made to the table. A diff map application may be used in some embodiments to determine the current state of the system at any given moment without over-loading the memory. The BDS system is a unique way to store indexes as well as its object map in some embodiments. One index can be used for all trees in a table. This is a good way to reduce memory footprint as each tree won’t have a different pointer to data. Separate pointers for key and trees index would also be in warm cache, which allows for faster lookups.

“C. Representations for Tables and Objects within the BDS System”

“Table Representation”

“FIG. FIG. 2 shows an example of a table within the BDS system. Particularly, FIG. FIG. 2 illustrates a table ‘bgp.neighbor. The java script object notation JSON is used to express the data. The table also includes the object type?bgp.neighborentry? There are three indices. This allows for faster lookups because the number of indices indicates how many trees are in the table. Every index includes a key. This can be an array or multiple keys. A key could include one or more keys that are associated with a tree to speed up lookup. For faster lookup, the table can have multiple trees. FIG. 2. The JSON file table can implicitly contain a sequence tree for bookkeeping in addition to the aspects shown in FIG. The sequence tree key may be a 64-bit monotonically increasing number. This sequence per table object ensures that there are no stale entries. In certain embodiments, the JSON tables can also define special properties for the table, such as Queue runner attributes and whether Diffmap is enabled or disabled. FIG. 2 shows the table. The table in FIG. 2 describes Diff map properties for a table. The table, for example, defines whether the Diffmap is enabled and specifies that each object can store only one Diffmap.

“Objects Representation”

“FIG. FIG. 3 shows an example of objects in a BDS-system. Particularly, FIG. 3 shows an example representation of the object ?bgp-neighbor-entry.? FIG. 3 shows that the BGP neighbor may include eleven attributes with different codes points. An object may contain up to 256 code points in some embodiments. The number of code points in some embodiments can be determined by the BDS format mask length. An object can be defined in JSON with all its attributes and the type of each attribute. The object definition could include either a standard C type or an object. Types such as ‘array’ are also possible. You can also include sub-types such as?array?”

“D. BDS System Memory format”

“FIG. 4. This is an example of a BDS system memory format. The BDS system distinguishes between object-map and object content as shown in FIG. 4. Map and object content can both be stored at the same location, while index can be stored at a different location. This makes it possible to reallocate the data without any interaction from an application. This is particularly useful for memory managers who need data locality, such as for e.g. Warm caches can be exploited. Some embodiments allow the object content to be stored in a serial byte string with no padding. Each object attribute can be stored in network order, one after the other. To locate an attribute, the object map is a combination or offset list and attribute mask. An example of this is an attribute code point 0. The first offset can be code point 1. And so on. Variable widths of an offset entry are possible (1 or 2 octets). This is encoded with the S bit in header. It allows for small and large offsets to been expressed. Because the system contains many small objects, only one-byte offsets are used.

The BDS system stores the memory format within an in-memory memory storage system that includes a memory coupled with a processor. In-system memory, for example, can be implemented with processor 121 and memory 122 discussed in relation to FIGS. 1A-1D. 1A-1D. The object and its map can be saved in memory using the memory format illustrated in FIG. 4. The index map of the indexes to one or more objects can also be saved in a separate location using the index map format described below.

“As shown at FIG. 4 The memory format can contain multiple fields. Below is a detailed discussion of each field.

“The ?Length? The?Length? field contains the total length of the object map, including the length field. If the memory formats need to be upgraded to support larger message sizes, the container protocol will indicate another payload format. The Length field in some embodiments can be approximately 16 bits long.

“The ?Type? An object code point can be included in the field?Type? FIG. 3 shows an example of BGP neighbor entry. 3. The object type is 100. The Type field may be approximately 16 bits in length, depending on the embodiment.

“The ?Sequence number? The field can be a monotonically growing number that represents a version the corresponding object. Each Table can have its own Sequence number space. The Sequence number may be 64 bits in length, depending on the embodiment.

“The ?Offset count? The field indicates the number of offsets within the object. The Offset count may be as long as 8 bits in some embodiments.

“The ?S? The?S? field can indicate whether the offset length is 1 byte or 2 bytes. S bit will be used if the offset size is greater than 256. The?S? can be used in some embodiments. In some embodiments, the?S? field may be 1 bit long.

“The ?U? “The?U? field indicates whether the data contents are an update. This bit will be set if the object is not deleted. The deleted object will remain in memory until it is propagated to all subscribers. It will be deleted during garbage collection (GC), or when the originator is certain that all objects are in sync. The U field may be as short as 1 bit in some embodiments.

“The ?D? The?D? field indicates whether the object map is a diffmap. Diff maps allow you to keep multiple versions of an object while only encoding their differences. The D field may be as long as 1 bit in some embodiments.

“The ?AML? The field indicates the length of an attribute mask. The AML field is the number of bytes that an attribute mask has been included in the object mapping. The AML field may be approximately 5 bits in length depending on the embodiment.

“The ?Attribute mask? The field is a bit vector that describes the encoded attributes in an object definition. A rib-entry object description may have 30+ attributes. Only a subset may be encoded depending on the context in which the object is instantiated. External BGP updates may contain different attributes than internal BGP updates. Each set bit in the Attribute mask field indicates whether the attribute that corresponds to the bit position was encoded. An example of an Attribute Mask field is the word?11000110. Bit #0, bit #1, bit #5, and bit #6 are set (starting at the left). Attribut #0 is pointed at by the first offset. Attribut #1 is pointed towards by the second offset. Attribut #5 is pointed toward by the third offset. Attribut #6 is pointed towards by the fourth offset.

“The ?Offset list? As mentioned above, the offset list field aids in pointing at the data in the object contents. The length of data content can be indicated by the offset list. The offset list may be variable in length in some cases.

“The ?Data list? The actual data content is represented by the field?Data list? The offset list may be variable in length in some embodiments.

“FIG. “FIG.5” illustrates an example Array Object format as defined by the BDS. The Array Object format includes fields like?Length? ?Type,? ?S,? ?Offset list,? ?Offset list? These fields are similar to those discussed in relation to FIG. 4. The Array Object format also contains an?Element? field. The Array Object Format also includes an?Element? field that specifies the number and type of elements in the array. Some embodiments allow for a fixed number of elements, while others allow for variable elements.

“E. Tables and Index Mapping.”

“FIG. “FIG.6” shows an example of a table in a BDS system. In the same format as FIG., the table can also be stored at another location. 6. The table representation also includes root fields like?Sequence root? field, and a ‘Root 1? field, a ‘Root 1? field, and an?Root2? field. Each of the root fields may be used to represent a search tree. For faster search, each table can have multiple trees. Each tree may include a composite key that supports multiple attributes. The BDS system implicitly creates a sequence tree when a table is created. In JSON file, the table representation might have required two tables to be created. However, the BDS system will create three trees internally. A monotonically increasing sequence number can be the key to sequence tree.

“FIG. “FIG. 6. Every tree in the table has an index map as its node. An index map is a way to organize information efficiently in memory. It also allows multiple keys for quick lookup operations. This format allows for an index map to be attached and retained in an object map. The index can be built separate from the underlying data to allow for batched inserts during warm CPU cache. This makes it more efficient and performance-efficient. Information is stored in hierarchies in a memory layout. Warm cache refers to the characteristic which leverages locality to reference information to quickly perform a specific search. A table format stores at most one node, including an index map.

An index map is a way to ensure that objects can be quickly found in the table. It also provides a pointer for the object map. An index map can also include a key and a list of node offset lists for each tree or node in a table. FIG. 6 shows an example of such an index map. FIG. 6 shows key and node offsets for two trees,?Root 1? ?Root 1? und?Root2? FIG. 6. A?key offset? The field contains the offset in key’s object map. It could be a single key, or an array of keys for composite keys. The?Node offset? The?Node offset? field contains an index map offset for a node in a tree. If root node-0 are radix trees, then they would have their own book keeping structure. This would be stored in the index map with its offset. Each node of the tree points to the next index map. The radix node’s left and right, for example, will point to the next index map. In some cases, all nodes in an index map are located on the same memory page. This arrangement allows for faster lookups and ensures that all indexes are stored in the warm cache. The key can be separated from the data to allow it to be indexed separately.

“FIG. “FIG.8” illustrates an example of an index map that points to another index map within a BDS system. An index map can contain a next pointer, which points to the next index map that will hold diff map as an object. If there is a diffmap, the next pointer will be set. Otherwise it will be set to NULL. As discussed above, an index map can point to another map for tree traversal. The index map may have tree nodes that point to the next index map for tree navigation.

“In certain embodiments, entries may be entered into a table like the one in FIG. 6. An object-update method, in particular, can create or update an object that represents the table. The sequence attribute?S will be automatically generated by the BDS system. The BDS system will automatically generate the sequence attribute?S? The transaction-number of a table. Each transaction that adds/changes/deletes an object will alter its sequence number. This allows two components to quickly identify if they are using the same version of an object. Some embodiments allow the sequence number to be a 64-bit entity that monotonically increases in size. This can be enough to avoid sequence-number wrappings. If wraps occur due to, for instance, a faulty component then all components with a replica the respective table must be restarted using sequence number 1. This is similar to Link State routing protocols for approaching end-of sequence space.

“F. BDS System Utilities.”

The BDS system offers a range of utilities to manage the BDSF tables, objects, and attributes mentioned above. The BDS system utilities are able to manage multiple versions of an object using differential encoding. This allows for smaller footprints known as diff maps. They can also manage snapshot views of tables and provide a queue runner to quickly compute the processing workload. They can also provide notifications via plugins for table updates/deletes, and can implement table synchronization protocols. The BDS system offers several utilities, including Diff map and Queue runner, Table plugs, and Table sync protocols. Each one is described in detail below.

“Diff-Map Utility”

Diff-maps allow incremental updates to objects in the BDS database to be handled without increasing memory footprint. Diff-maps allow you to take a snapshot of objects (e.g. a table) at different times. Diff-maps are able to keep a snapshot and enable tracking and debugging of specific tables’ state. A diff-map may be a Last in First Out (LIFO), view of an object. This is where a new object has been added at the beginning. The linked list of diff maps each represents a change to the object. The diff map associated to an object map may be stored in a memory address that is not associated with the object map, object or index maps.

“FIGS. FIGS. 9-13 show various examples of object maps, indexmaps, and diff-maps used in the BDS system. Particularly, FIG. FIG. 9 shows the base object map with its corresponding index map; FIG. FIG. 10 shows an object map that has changed attributes and the corresponding index map. It also includes the diff-map and its corresponding diffmap index map. FIG. 11 shows an object map that has a new entry, corresponding index map, and the resulting diffmap and diff map index maps. FIG. 12 shows a snapshot showing changes to an objectmap with diff-maps, corresponding index maps representing each of the change. FIG. 13 shows an example flow diagram to be used when generating an object from diffmaps.

“As stated above, FIG. FIG. 9 shows the base object map 902 as well as the corresponding index maps 904. The based map 902 is a table with two trees, a sequence (10) and an attribute mask (?10011011?). Read from left to right, an offset list and attribute data. All attributes have a fixed length of 4 bytes. Attribut 1 and 4 respectively are keys to tree 1 or tree 2. Many fields on the index map and object map are not shown for simplicity.

“FIG. FIG. 10 shows an object map that has a changed attribute and the corresponding indexmap, as well as the diff-map and its corresponding map. Particularly, FIG. FIG. 10 illustrates changes to an objectmap, such as the one shown in FIG. 9 where changes are made to attributes 2, 5, 8, and 8. Keys remain the same. The object map 1002 is displayed with the corresponding index map 1004. FIG. FIG. 10 also shows the diff-map 1006 as well as the corresponding diff-map index map 1008.”

“The sequence number of an object map changes from 10 to 21 when there is a change in its attributes (shown in FIG. 9 to 21. Only the modified attribute of an attribute is included in the diff-map 1006 when it is changed. If a complete object is required (e.g. 902 in FIG. If a complete object (e.g., 902 in FIG. 9) is required, you can obtain the object by collapsing diff-map 1006 and the latest object map 1002.

“FIG. “FIG. Particularly, the objectmap 1002 has a new attribute in relation to the base objectmap 902 as shown in FIG. 9. The addition of a “1” to the attribute mask represents the new attribute. The new attribute is represented by the addition of a?1? The attribute can also be added to the attribute, resulting in a new?Att9? The new attribute also results in a new?Att 9?. The diff-map 1106 results in a??1? The corresponding new attribute must be ignored or removed when collapsing diff-map 1106 with the object map 1102 in order to get the original object map 902.

“FIG. “FIG. Particularly, FIG. FIG. 12 shows an objectmap 1202 (with sequence number 21), and the corresponding Index map 1204, which represent the most recent state of the objectmap. The Diff-map 1206, and the corresponding Index Map 1208, represent the previous instance, while the diffmap 1210 and the corresponding Index Map 1212 represent the oldest instance. The snapshot can preserve previous state of the system and maintain a temporal order among snapshot instances. Some embodiments allow for unlimited state numbers. Some embodiments allow for unlimited number of states, as memory space may be limited. In these cases, certain snapshots could be stored in higher-tier storage media (e.g. SDD/HDD storage). FIG. FIG. 13 shows a flow diagram for an example of a process to regenerate an object using diff-maps.

“Diff-Maps and Trees.”

“FIG. “FIG. 14” illustrates an example of a changed object map and its resulting diff-map in relation sequence, prefix and AS-path trees within a BDS system. Diff-maps are a part sequence tree, and can be used for trees where a key has been changed, even after an object is added to a tableau. FIG. 14 shows an example. 14 shows how an AS-path key can be changed along with other attributes. If the object sequence number 10 was used, and the new number 21 is used, the trees will be attached to a single map with the diff map. Only the sequence tree, the AS-path tree, and the old sequence number will point to the diff-map. This allows for faster search of diff-map objects. The prefix tree will only have one instance of the object map and index attached to it. This tree’s diff-map can only be accessed via index map next pointer.

“Queue Runner”

Summary for “System and methods to define object memory format in memory, store for object interactions and manipulation, and exchange it in distributed network devices.”

“Distributed network can use a number of nodes interconnected through a network to exchange or process networking information. The distributed networking system may use different methods to represent and manipulate networking information. This can lead to increased complexity.

“In a brick data-store (BDS), in-memory databases based system (hereinafter referred as the “BDS system?” In-memory databases are kept state information related to border-gate protocol (BGP), routing information base entries (RIB), BGP Neighbor tables, intermediate system-intermediate (IS-IS), adjacencies and Link-State Databases. Interface information, Chassis info, etc. Brick Data Store Format is used for object representation in memory as well as in the BDS Database. All state transactions (tables, objects and attributes, etc ) are handled by the database in the same way as a SQL database.

The BDS system offers a unified memory layout which significantly reduces complexity for each application logic to serialize or de-serialize data. BDS also allows for strong abstraction of the infrastructure, which allows a suite utilities to be built around BDSF and made available to end-user applications. This allows developers to concentrate on the application logic that is built around a uniform object format and utilities.

“In certain embodiments, tables and table properties can be defined using configuration files in Java Script Object Notation, (JSON), which allows for easy specification of dynamic objects. The BDSF data representation is consistent across all inter-process communications, files, and in-memory. This allows for easy access to information both in memory and during processing.

The BDS system defines an object table, an item container, and an attribute binary format. This uniquely represents the information within the system over inter-process communication and in-memory databases. BDS provides an uniform representation of objects within the system and allows applications to use it to understand and use that information. This greatly reduces the amount of code required to read and create information throughout the system. The object format is a binary file format that has sufficient information to allow it to be organized with object tables or databases to improve its ability to capture system state. The BDS system can be used to optimize memory layout and index map. This allows for an instance to be indexed in multiple flavors of lookup trees, each with additional information. Some embodiments allow the system state to be stored on off-board servers that have large storage capacities. This, along with the temporal ordering information, can make it possible to view and replay the system’s state at any time. The BDS system can provide object consistency across objects tables by using a modified version IS-IS routing protocol. This ensures table synchronization. Maintaining synchronization in loosely coupled systems, such as those using IS-IS routing protocols, can be difficult if you don’t provide object consistency.

“Some embodiments of the BDS system provide a bit compression technique to recognize objects in the table. This ensures that tables are synchronized across all modules. The BDS system can be used to recover the system after a restart of a module. The queue runner eliminates the need to keep track of timer points or handles. It is possible to quickly recover from a restart using a snapshot stored on disk. The BDS system can be used to indicate add/delete, or a delta modification in an object. With the help of plug ins registers, applications receive notifications about any operation that is made to the table. A diff map application may be used in some embodiments to determine the current state of the system at any given moment without over-loading the memory. The BDS system is a unique way to store indexes as well as its object map in some embodiments. One index can be used for all trees in a table. This is a good way to reduce memory footprint as each tree won’t have a different pointer to data. Separate pointers for key and trees index would also be in warm cache, which allows for faster lookups.

In-memory storage systems that are coupled to processors can be used in one embodiment of a system for storing objects more efficiently in memory. The system also includes a first memory location with a predetermined memory format that stores content of an object. It also includes an object map. This object map contains an attribute mask and an off-set list to locate an attribute among a number of attributes. The attribute mask is a bit vector that describes an encoding of each object’s attributes. A second location of memory is also included in the system. It stores an index map of indexes for one or more objects. The index map also includes an index to the object’s map.

“In some embodiments, the system also includes a table that is stored in a third place of memory with a predetermined format. The table may also be configured to contain at least one index map node. The index map may contain a key and an offset list for each table node. The index map can be further configured to allow for a lookup of an object in the table and to point to the object map. Some embodiments include a length field that identifies a fixed length in bits within the first predetermined storage format.

“In some embodiments, one or more of these fields can be stored in the first predetermined memory form for an object or object map: the attribute mask length, which indicates the number of bytes in the attribute mask; the sequence number, which indicates a version of an object; and the offset count, which indicates the number of objects. Some embodiments store data for the object in binary format in the predetermined memory format. The system may also include a fourth location with a predetermined format that stores a diffmap associated with the object map. This diff map includes a diffmap attribute mask and a list listing all attributes from the object’s plurality that have changed. The system may also include a fifth location with a fifth format that stores diff map index maps associated with the diffmap, where indexes to the diffmap are stored. The index map of indexes for one or more objects may include an index to the diffmap index map. Some embodiments include a Java Script Object Notation (JSON) format in the first and second predetermined memory formats. The system may also include a sixth location of storage that contains a sixth predetermined format memory. This is used to communicate a message to another processor. It includes information about at least one of the following: replication of an object or table synchronization.

“One aspect of the invention is a computer-readable storage medium that contains instructions. These instructions, when executed by the computer, cause the computer execute a method to efficiently store objects in memory. The object map includes an object mask and an offset list to locate an attribute of a plurality. The attribute mask includes a bit vector that describes an encoding of the object’s attributes. Further, the method includes the storage of an index map of indexes for one or more objects at another location in the in-memory memory system in a second memory format. The index map is an index to the object map.

“In some embodiments, the method also includes the storage of a table at a third location in the in-memory memory system in a pre-determined format. The method may also include storing at most one node that contains the index map within the table. The method may also include a lookup of an object in the table and a pointer at the object map. Some embodiments include storing the object’s content and an object map at a predetermined location in memory. This includes storing a length field that indicates a fixed length in bits in the predetermined memory format. Some embodiments include storing an object’s content and an object map at the first location of memory in an In-Memory System in a predetermined format. These fields can be one or more of these: an attribute mask length that indicates the number of bytes in the attribute mask, sequence number indicating the version of the object, an offset count that indicates the number of offsets within the object. Some embodiments allow for storage of object content and an object map at the first location of memory in an In-Memory System in a predetermined format.

“One aspect of a system to store objects more efficiently in memory of an In-Memory Storage System includes an object table and container and an attribute binary format that uniquely represent the information in the system across Inter Process Communication, In-Memory Database and a filesystem. The system provides a uniform representation of objects in the system. Applications can interpret and use this information. It also allows for de-serialization and serialization of information which significantly reduces the amount of code required to read and create information throughout the system. The object format can be a binary format that has sufficient information to allow the organization of this around data bases or object tables. The system has an efficient memory layout that includes the object map and index map. This allows for instances to be indexed into multiple flavors of lookup trees, each with additional information. The system state can be stored on off-board servers that have large storage capacities. This, along with the temporal ordering of information, can allow for the viewing and replaying of the system’s current state at all times. Some embodiments include object consistency across objects tables. This is done by using a modified version ISIS routing protocol to ensure table sync. The system may use bit compression to acknowledge objects in the table. This ensures that tables are synchronized between modules. The system can be used to recover system from a restart of a module using a queue runner in some embodiments. The queue runner may eliminate the need for pointers or timers and make it easy to recover from a restart by using a snapshot saved on a hard drive.

“In certain embodiments, the system can indicate add/delete and a delta change in an item with plug-ins. With the help of plugs that are registered via an internal publish-subscribe bus, applications can be notified about any operation on the table. The system can capture all system states and make them accessible to the end-user. In some cases, it also retains updates as deltas over an underlying model. A diff map can be used in some embodiments to store the current state of the system at any given instance. The system may store indexes as well as its object map in some instances. Each tree in the table can have a single index and an object map. This reduces memory footprint as each tree does not have a unique pointer to the data. This can also speed up table lookup because separate pointers to key would be in hot cache.

“The following sections of the specification with their respective contents can be useful for reading the descriptions of various embodiments:”

“Section A” describes a computing environment and network environment that may be helpful in the practice of embodiments.

“Section B” describes systems and methods that can be used to create brick data stores (BDS) in memory databases.

“Section B describes systems and methods to represent tables and objects in BDS databases.”

“Section D” describes various embodiments of BDS memory formats that are used in the BDS database.

“Section E” describes various embodiments of systems or methods to represent tables and index mappings in the BDS database.

“Section F” describes various embodiments of systems or methods that provide utilities through the BDS database.

“A. Computing and Network Environment.”

“Before we discuss specific embodiments of this solution, it might be useful to describe aspects such as the operating environment and associated system components (e.g. hardware elements) in relation to the methods or systems described herein. Referring to FIG. FIG. 1A shows an example of a network environment. The network environment includes one to three clients 102a-102n (also known as client(s), 102 and client(s), 102), client node(s), 102 and client(s), 102), client computer(s), 102, and client machine(s), 102), client client(s), 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102. Client device(s), 102. Endpoint(s), 106 or remote machine(s). A client 102 can be used as both a client node that seeks access to server resources and as a server that provides access to server resources for other clients.

“Although FIG. FIG. 1A depicts a network of 104 between clients 102, servers 106. However, clients 102 may be on the same network (104). Some embodiments may have multiple networks 104 connecting the servers 106 and clients 102. One of these embodiments may have a network 104. A network 104 could be a private network, while a network (not shown), may be public. A network 104 could be a private network, while a network 104.1 may be a public network. A public network. Networks 104 and104 are also possible in another embodiment. Both networks 104 and 104 may be private networks.”

“The network 104 can be connected via either wired or wireless links. Digital Subscriber Line (DSL), coaxial cables lines or optical fiber lines can all be connected via wired links. Wireless links can include BLUETOOTH and Wi-Fi (Worldwide Interoperability for Microwave Access) as well as an infrared channel, satellite band, or BLUETOOTH. Wireless links can also include any cellular network standard used to communicate between mobile devices. This includes standards that are 1G, 2G or 3G. If the network standards meet a specified or set of standards, they may be considered one or more generations of mobile telecommunications standards. The 3G standards, for example, may correspond to the International Mobile Telecommunications-2000 (IMT-2000) specification, and the 4G standards may correspond to the International Mobile Telecommunications Advanced (IMT-Advanced) specification. AMPS, GSM and UMTS are some examples of cellular network standards. Cellular network standards may use various channel access methods e.g. FDMA/TDMA/CDMA, SDMA. Different types of data can be transmitted using different standards and links in some embodiments. Other embodiments allow the transmission of identical data via different standards and links.

The network 104 can be any type or form of network. The network 104’s geographical coverage can vary greatly. It could be a body-area network (BAN), personal area network, or a local-area network. Intranet, metropolitan area network (MAN), wide area network(WAN), or Internet. The network 104’s topology can be any type and could include any combination of: bus, star or ring, tree, point-to-point, bus or star. The network 104 could be an overlay network that is virtual and sits on top one or more layers from other networks 104?. The network 104 can be any network topology known to ordinary skill in the art and capable of supporting operations. The network 104 can use different protocols and layers, such as the Ethernet protocol, TCP/IP, the ATM (Asynchronous Transfer Mode), SONET (Synchronous Optical Networking), or SDH (Synchronous Digital Hierarchy). TCP/IP’s internet protocol suite can include the application layer, transport layer and internet layer (including IPv6). Network 104 could be classified as a broadcast network or a telecommunications network. It also may include a data communication network or computer network.

“In some embodiments, multiple servers may be logically grouped 106. One of these embodiments may refer to the logical grouping of servers as either a server farm 38, or a machine farm 38. Another embodiment may allow the servers 106 to be geographically dispersed. A machine farm 38 can be managed as one entity in other embodiments. Another embodiment of the machine farm 38 may include a number of machine farms 38. Each machine farm 38 may contain multiple machines farms 38.

In one embodiment, the servers 106 of the machine farm 38 could be stored in rack systems with high density and associated storage systems. They would then be located in an enterprise-level data center. This embodiment consolidates the servers 106 to improve system management, data security, and system performance. Servers 106 and high-performance storage systems are located on localized high-performance networks. The centralization of the servers 106, storage systems, and their coupling with advanced system management tools allows for more efficient use.

“Servers 106 and 106 from each machine farm 38 don’t need to be physically close to other servers 106 in the machine farm 38. The machine farm 38 group of servers 106 may be connected using either a metropolitan-area (MAN) or wide-area (WAN) connection. A machine farm 38 could include servers 106 located on different continents, in different areas of a country, state, city or campus. The data transmission speeds between the server 106 of the machine farm 38 can increase if they are connected via a local-area networking (LAN) connection, or another type of direct connection. A heterogeneous machine farms 38 could also include servers 106 that operate according to one type of operating system and one or two other servers 106 that run one or several types of hypervisors. Hypervisors can be used in these embodiments to simulate virtual hardware, partition and virtualize physical hardware, as well as to execute virtual machines that allow access to computing environments. Multiple operating systems may run simultaneously on the host computer. Native hypervisors can run directly on the host machine. VMware ESX/ESXi, made by VMWare, Inc. of Palo Alto, Calif., and the Xen hypervisor, which is an open-source product whose development was overseen by Citrix System, Inc., as well as the HYPERV hypervisors that Microsoft or other companies provide. Hosted hypervisors can run in an operating system at a second level. VIRTUALBOX and VMware Workstation are two examples of hosted hypervisors.

“Management of the machine farms 38 could be decentralized. One or more servers 106 could be composed of components, subsystems, and modules that support one or several management services for the machine farms 38. One or more servers 106 are used to manage dynamic data. This includes techniques for managing failover, replication and increasing the resilience of the machine farm. Each server 106 can communicate with both a persistent store or, in certain embodiments, a dynamic store.

“Server106” may be a file, application, web, proxy, server, firewall, gateway, gateway, virtualization, deployment, SSL VPN server or firewall. The server 106 can be called a remote machine, or a node in one embodiment. A plurality of nodes (290) may be located in the path between two communicating servers.

Referring to FIG. “Referring to FIG. 1B, a cloud computing ecosystem is depicted. Client 102 may have access to one or more resources through a cloud computing environment. One or more clients 102a-102n may be part of the cloud computing environment. They can communicate with the cloud 108 via one or several networks 104. Clients 102 could include thick clients, thin client, or zero clients. Even if the client is disconnected from servers 106 or cloud 108, a thick client can still provide some functionality. To provide functionality, a thin client or zero client might depend on the connection with the cloud 108 and server 106. Zero clients may depend on the cloud108, other networks 104, or servers 106 for operating system data retrieval. The cloud 108 could include back end platforms such as servers 106, storage, data centers, or server farms.

“Cloud 108 can be either public, private or hybrid. Public clouds could include public servers106 that are managed by third parties for clients 102 or their owners. Servers 106 could be located in remote locations, as described above. The servers 106 may be connected over public networks to other public clouds. Private clouds could include servers 106 that are owned by clients 102. Private clouds can be connected to servers 106 via a private network. Hybrid clouds (108) may connect to both public and private networks 104 and servers106.

“Cloud 108 may include a cloud-based delivery, e.g. Software as a Service 110, Platform as a Service 112, and Infrastructure as a Service 114. IaaS can refer to renting infrastructure resources for a specific time period. IaaS providers can offer large amounts of storage, networking, servers, or virtualization resources. This allows users to scale up quickly and access more resources as they need them. IaaS may include infrastructure and services such as OVH HOSTING, Montreal, Quebec, Canada, AMAZON Web Services, Amazon.com, Inc., Seattle, Wash., Rackspace US, Inc., San Antonio, Tex., Google Compute Engine, Google Inc., Mountain View, Calif., RIGHTSCALE, Inc., Santa Barbara, Calif., and WINDOWS AZURE provided by Microsoft Corporation of Redmond, Wash., Google App Engine, Google Inc., and HEROKU, Heroku, Inc. WINDOWS AZURE, provided by Microsoft Corporation of Redmond, Wash., Google App Engine, provided by Google Inc., HEROKU provided By Heroku, Inc. of San Francisco, Calif. These are examples of PaaS. They may provide the same resources as PaaS, such as storage, networking, servers, virtualization, operation system, middleware, runtime resources, and operating system resources. SaaS providers can offer additional resources, such as data and application resources, in some instances. SaaS includes GOOGLE APPS offered by Google Inc., SALESFORCE offered by Salesforce.com Inc. San Francisco, Calif. or OFFICE 365 offered by Microsoft Corporation. Data storage providers may also be included in SaaS, for example. DROPBOX provided Dropbox, Inc., San Francisco, Calif., Microsoft SKYDRIVE provided Microsoft Corporation, Google Drive provided Google Inc., and Apple ICLOUD provided Apple Inc., Cupertino, Calif.

Clients 102 can access IaaS resources using one or more IaaS standard, such as Amazon Elastic Compute Cloud, Open Cloud Computing Interface, Cloud Infrastructure Management Interface, or OpenStack standards. Clients may be able to access resources via HTTP using some IaaS standards. These standards may use the Representational state Transfer (REST), Simple Object Access Protocols (SOAP) protocols. Clients with 102 clients may have access to PaaS resources using different PaaS interfaces. Some PaaS interfaces may use HTTP packages, JavaMail APIs, Java Data Objects(JDO), Java Persistence APIs (JPA), Python APIs and web integration APIs. These APIs can be used for various programming languages, such as Rack for Ruby, WSGI For Python, PSGI for Perl or any other APIs that are built on REST or HTTP, XML or other protocols. Clients 102 can access SaaS resources via web-based user interfaces provided by a browser (e.g. GOOGLE CHROME and Microsoft INTERNET Explorer are some examples of SaaS resources that clients 102 can access. Clients 102 can also access SaaS resources via smartphone or tablet apps, such as Salesforce Sales Cloud or Google Drive app. Clients 102 can also access SaaS resources via the client operating system. This includes, e.g. Windows file system for Dropbox.

“In certain embodiments, access may be authenticated to IaaS or PaaS resources. A server or authentication server might authenticate a user using security certificates, HTTPS, and API keys. API keys can include different encryption standards, such as Advanced Encryption Standard, (AES). “Data resources can be sent via Transport Layer Security (TLS), or Secure Sockets Layers (SSL).

“The client102 and server106 can be deployed on any type of computing device and/or executed from it, e.g. A computer, network device, or appliance that can communicate on any type of network and perform the operations described herein. FIGS. FIGS. 1C and 1D show block diagrams of a computing unit 100 that can be used to practice an embodiment of client 102 or server 106. FIGS. 1C and 1D show that each computing device 100 has a central processing module 121 and a main storage unit 122. FIG. FIG. 1C shows that a computing device 100 can include a storage device 128, a installation device 116 and a network interface 118. Display devices 124 a-124 n are shown. A keyboard 126 is also shown. A mouse. Without limitation, the storage device 128 can include an operating system, software, or a software of a snapshot linking system 120. FIG. FIG. 1D shows that each computing device 100 can also have additional elements, e.g. A memory port 103, bridge 170, input/output devices 130a-130n (generally referred by using reference number 130) and a cache memory 140 in communications with the central processing unit.

“The central processing module 121 is any logic circuitry which responds and processes instructions from the main memory device 122. A microprocessor unit is often used to provide the central processing unit (121) in many embodiments. Those manufactured by Intel Corporation, Mountain View, Calif., and those manufactured at Motorola Corporation, Schaumburg (Ill.); the ARM processor with TEGRA system on a Chip (SoC), manufactured by Nvidia, Santa Clara, Calif. ; the POWER7 process, manufactured by International Business Machines, White Plains, N.Y., or those manufactured at Advanced Micro Devices, Sunnyvale, Calif. These processors or any other processor that can operate as described herein may be used to create the computing device 100. The central processing unit (121) may use instruction level parallelism or thread level parallelism. It can also utilize different levels of cache and multi-core processors. Multi-core processors may contain multiple processing units within a single computing unit. Multi-core processors include, for example, the AMD PHENOM IIX2, the INTEL Core i5 or INTEL CPU i7.

“Main memory unit (122) may contain one or more memory chips that can store data and allow any storage location to directly be accessed by the microprocessor. 121 Main memory unit 122, which may be volatile, can store more data than 128 memory. The main memory unit 122 can be Dynamic random-access memory (DRAM), or any variants thereof, Burst SRAM/SynchBurst SRAM(BSRAM), Fast Page Mode (FPM) DRAM, Extended Data Output RAM/EDO RAM, Extended Data Output (EDO DRAM), Burst Extended DRAM/BEDO DRAM), Single data rate synchronous DRAM/SDR SDRAM), Double data rate SDRAM/DDR SDRAM), Direct Rambus RAMbus DRAM/DRDRAM (DRDRAM/XDRDRAM/DRDRAM (DRDRAM), and DRAM/DRDRAM (DRDRAM), DRAM/DRDRAM (DRDRAM), DRAM/DRDRAM (DRDRAM), DRAM/DRDRAM (DRAM), DRAM/DRDRAM (DRDRAM), DRAM/DR DRAM/XDR DRAM/DRDRAM (DRDRAM), DRAM/DRDRAM (DRDRAM), Direct Rambus DRAM/DRAM (DRDRAM), DRAM), or DRAM adRAM), In some embodiments, the main memory 122 or the storage 128 may be non-volatile; e.g., non-volatile read access memory (NVRAM), flash memory non-volatile static RAM (nvSRAM), Ferroelectric RAM (FeRAM), Magnetoresistive RAM (MRAM), Phase-change memory (PRAM), conductive-bridging RAM (CBRAM), Silicon-Oxide-Nitride-Oxide-Silicon (SONOS), Resistive RAM (RRAM), Racetrack, Nano-RAM (NRAM), or Millipede memory. You can use any of the memory chips described above, or any other memory chips that are capable of operating in accordance with this invention. FIG. FIG. 1C shows how the processor 121 communicates via a system bus 150 with main memory (described below). FIG. FIG. 1D shows an embodiment of a computing system 100, in which the processor communicates with main memory via a memory port. FIG. FIG. 1D may show DRDRAM as the main memory 122.

“FIG. “FIG. Other embodiments of the main processor 121 connect with cache memory 140 via the system bus 150. Cache memory 140 is usually faster than main memory 122 in response times and is typically supplied by SRAM (BSRAM), EDRAM or EDRAM. FIG. 1D shows how the processor 121 communicates via a local bus 150 with I/O devices 130. There are many buses that can be used to link the central processing unit 121 with any I/O device 130. These include a PCI bus or a PCIX bus or a PCI Express bus or a NuBus. In embodiments where the I/O device 124 is a video monitor, the processor 121 can use an Advanced Graphics Port to communicate with the display (124) or the I/O controller (123 for the display 124) FIG. FIG. 1D shows an example of a computer 100 where the main processor 121 can communicate directly with I/O device 130b or other processors. via HYPERTRANSPORT or RAPIDIO communications technology. FIG. FIG. 1D shows another embodiment where local buses and direct communication are combined: processor 121 uses a local interconnect bus to communicate with I/O devices 130a while also communicating directly with 130b.

The computing device 100 may contain a variety of I/O devices 130a-130n. Trackpads, trackpads and trackballs can be used as input devices. Video displays, graphical displays and speakers can be output devices.

“Devices 130a-130n may contain multiple input or output devices such as Microsoft KINECT or Nintendo Wiimote, Nintendo WII U GAMEPAD or Apple IPHONE. Some devices 130 a-13 n can combine some inputs and outputs to allow gesture recognition inputs. Devices 130 a-130n allow facial recognition, which can be used for authentication or other commands. Devices 130 a-130n provide voice recognition and inputs such as Microsoft KINECT by Apple, SIRI to IPHONE by Apple or Google Now.

“Additional devices 130a-130n can be used as input or output devices. They include haptic feedback devices and touchscreen displays. Multi-touch screens, touchpads and touch mice may use different technologies to sense touch. These technologies include capacitive (surface capacitive), projected capacitive (PCT), resistive (infrared), waveguide, dispersive touch (DST), in cell optical, surface acoustic (SAW), bendingwave touch (BWT) or force-based sensing technology. Multi-touch devices can allow for two or more contact points with the surfaces, which allows advanced functionality such as pinch, rotate, scroll or other gestures. Some touchscreen devices, such as Microsoft PIXELSENSE and Multi-Touch Collaboration Wall may have larger surfaces like on a table-top, or on a wall. They may also interact with other electronic gadgets. A group of I/O devices 130a-130n, display devices 124-64 n and some other devices could be augment reality. An I/O controller 123 may control the I/O devices as shown in FIG. 1C. 1C. An I/O device can also be used to store and/or install the computing device 100. Other embodiments may also provide USB connections (not illustrated) for receiving handheld USB storage devices. An I/O device 130 can be used as a bridge between system bus 150, external communication buses, e.g. A USB bus, a SCSI Bus, a FireWire Bus, a FireWire Bus, an Ethernet Bus, a Gigabit Ethernetbus, a Fibre Channel Bus, or a Thunderboltbus.

In some embodiments, display devices 124a-124n can be connected to I/O control 123. Display devices include liquid crystal displays (LCD), thin-film transistor LCD (TFTLCD), blue-phase LCD, electronic papers, (e-ink), and liquid crystal on silicon displays (LCOS). They may also be connected to I/O controller 123. Some examples of 3D displays include: Stereoscopy, polarization filter, active shutters or auto stereoscopy are all possible uses for 3D displays. Display devices 124a-124n can also be head-mounted displays (HMD). Display devices 124 a?124 n and the corresponding I/O control units 123 can be controlled or have hardware support OPENGL, DIRECTX API, or other graphics libraries in some embodiments.

“In some instances, the computing device 100 can connect to multiple display devices (124 a-124n), which may be the same type or different. Any of the I/O device 130 a?130 n or the I/O controller123 can include any type or combination of hardware, software, and hardware to enable, support, enable, or provide for multiple display devices 124a?124n. The computing device 100 could include any type or form of video adapter or video card, driver and/or library to connect, communicate, connect, or otherwise use multiple display devices. Software may be developed and built to work with another computer’s display device 124a. One example is that an Apple iPad can connect to a computing device 100, and the display of the 100 may be used as an additional screen. This could allow the user to use the 100’s display as an extended desktop. A computing device 100 can be configured to support multiple display devices 124a-124n. One who is skilled in the art will appreciate and recognize the many ways that this configuration may be possible.

“Referring to FIG. “Referring again to FIG. One or more hard drives, or redundant arrays or independent disks, for storing operating systems or software. One example of a storage device 128 is a hard disk drive (HDD), optical drive, DVD drive or BLU-RAY driver; solid-state drive(SSD); USB flashdrive; or any other device that can store data. Many storage devices can include both volatile and nonvolatile memories. This includes solid-state hybrid drives, which combine hard disks with solid states cache. One storage device 128 could be read-only, non-volatile or mutable. One storage device 128 could be internal and connect via a bus 150 to the computing device 100. One storage device 128 can be external and connects to the computing device 100 via an interface device 130. This external bus provides an external bus. One storage device 128 can connect to the computing devices 100 via the network interface 118. This network 104 includes, e.g. the Remote Disk For MACBOOK AIR from Apple. Client devices 100 may not need a non-volatile data storage device 128. They may also be thin clients or zero clients. A storage device 128 can also be used to install software or programs 116. The operating system and software can also be run from a bootable media, such as a CD or DVD. KNOPPIX is a bootable CD that runs GNU/Linux. It can be downloaded from knoppix.net.

Client device 100 can also download software from an application distribution platform. The App Store for iOS, provided by Apple, Inc., is the Mac App Store provided to Apple, Inc., GOOGLE LAY for Android OS provided o Google Inc., Chrome Webstore CHROME OS provided o Google Inc., Amazon Appstore for Android OS, KINDLE FIRE, provided by Amazon.com, Inc., are all examples of application distribution platforms. A repository of applications may be included in an application distribution platform. This can be on a server (106) or cloud 108 that clients 102 a-102n can access via a network (104). A distribution platform could include applications developed by different developers. An application distribution platform allows users of client devices 102 to select, buy and/or download applications.

“Moreover, the computing device 100 can include a network interface 118 that allows it to connect to the network 104 via a variety connections such as standard telephone lines LAN/WAN links (e.g. 802.11, T3, Gigabit Ethernet and Infiniband), broadband connections (e.g. ISDN, Frame Relay ATM, Gigabit Ethernet or Ethernet-over-SONET), ADSL, VDSL BPON, GPON or fiber optical including FiOS), or a combination of all of these connections. TCP/IP can establish connections using a variety communication protocols, such as Ethernet, ARCNET and SONET, SDH. Fiber Distributed Data Interface (FDDI), IEEE 802.21/b/g/n/ac CDMA. GSM, WiMax, and direct asynchronous connections. One embodiment shows that the computing device 100 can communicate with computing devices 100. Any type and/or combination of tunneling protocols or gateways, e.g. Secure Socket Layer, Transport Layer Security, or Citrix Gateway Protocol, manufactured by Citrix Systems, Inc., Ft. Lauderdale, Fla. The network interface 118 can include a built-in network connector, network card or PCMCIA network card. It may also contain an EXPRESSCARD networkcard, EXPRESSCARD card network card, card bus adapter and wireless network adapter. Modems, or any other device that is capable of interfacing with the computing device 100 to any network that can communicate the operations described in this article.

“A computing device 100, of the type shown in FIGS. “A computing device 100 of the type shown in FIGS. 1B and 1C can be controlled by an operating system that controls access to system resources and scheduling. Any operating system can run on computing device 100, including any version of MICROSOFT WINDOWS, Unix or Linux, and any embedded operating system. It can also run any operating system for mobile devices. WINDOWS 2000, WINDOWS Server 20022, WINDOWS CE, WINDOWS Phone, WINDOWS XP, WINDOWS VISTA and WINDOWS 7 all manufactured by Microsoft Corporation of Redmond, Wash., MAC OS, iOS, manufactured Apple, Inc. of Cupertino, Calif., and Linux, a freely available operating system, e.g. Linux Mint distribution (?distro?) Ubuntu distributed by Canonical Ltd. in London, United Kingdom. Unix or other Unix like derivative operating systems. Android designed by Google, Mountain View, Calif. Certain operating systems, such as the CHROME OS from Google, can be used on zero clients and thin clients including, for example, CHROMEBOOKS.

“The computer system 100 may include any computer system that can communicate with a computer network, such as a desktop, phone, notebook, computer, computer or telephone, netbook, ULTRABOOK or tablet, server or handheld computer, mobile telephone, smartphone, tablet or mobile computing device, media player, gaming system, mobile computing device or any other form of computing, telecommunications, or media device. The computer system 100 is equipped with sufficient memory and processor power to carry out the operations described. The computing device 100 can have different operating systems and processors depending on its configuration. Samsung GALAXY smartphones, for example, are controlled by the Android operating system, developed by Google, Inc. GALAXY phones receive input via a touch interface.

“In some embodiments, a computing device 100 may be a gaming system. The computer system 100 could include, for example, a PLAYSTATION 3 or PERSONAL PLAYSTATION PORTABLE(PSP), or a PLAYSTATION VITA manufactured by the Sony Corporation, Tokyo, Japan, a NINTENDO DS, NINTENDO 3DS, NINTENDO WII, NINTENDO WII, NINTENDO WII U manufactured by Nintendo Co., Ltd., Kyoto, Japan, and an XBOX 360 manufactured by Microsoft Corporation, Redmond, Wash

“In certain embodiments, the computing devices 100 are digital audio players such as the Apple IPOD Touch, IPOD Touch and IPOD NANO line of devices manufactured by Apple Computer in Cupertino (Calif.). Other functionality may be available for some digital audio players, such as a gaming system, or functionality that is made available by applications from a digital distribution platform. The IPOD Touch can access the Apple App Store. The computing device 100 may be a portable media player, digital audio player, or a portable media player that supports file formats such as MP3, WAV and M4A/AAC Protected AAC AIFF and.mov, H.264/MPEG-4 AVC video file formats.

“In certain embodiments, the computing devices 100 are a tablet e.g. The IPAD line of Apple devices; the GALAXY TAB series of Samsung devices; or KINDLE IRE, by Amazon.com, Inc., Seattle, Wash. The computing device 100 can also be used as an eBook reader. The KINDLE family devices by Amazon.com, and the NOOK family devices by Barnes & Noble, Inc., New York City, N.Y.”

“In some embodiments, the communication device 102 may include a combination of devices. A combination of a smartphone and a digital audio or portable media player. One example of one of these embodiments would be a smartphone. The IPHONE smartphone family manufactured by Apple, Inc., a Samsung GALAXY smartphone family manufactured by Samsung, Inc., or a Motorola DROID smartphone family. Another embodiment of the communications device102 is a computer or laptop that has a web browser, microphone, and speaker system. a telephony headset. These communications devices 102 can be web-enabled to receive and initiate calls. A laptop or desktop computer may also be equipped with a webcam, or another video capture device, that allows for video chat and video calling.

“In some embodiments, one or more machines 102 and 106 are monitored as part of network management. One of these embodiments may identify the status of a machine by identifying load information (e.g. the number and type of processes running on it, their CPU utilization, memory usage), port information (e.g. the number and addresses of the available communication ports), or session status (e.g. the duration and type and whether they are active or inactive). Another embodiment of this type of information can be identified using a variety of metrics. The plurality may be used at least partially to make decisions regarding load distribution, network traffic management and network failure recovery, as well as other aspects of the operations described herein. The systems and methods described herein will make it easy to see aspects of the components and operating environments mentioned above.

“B. Brick Data Store (BDS), In-Memory Database

“In a BDS-in-memory system (hereinafter called “the BDS system”), state information relating to border-gate protocol (BGP) routing information base (RIB) entries, BGP Neighbor Tables adjacencies, Intermediate System Intermediate System(ISI), adjacencies and link states is retained in an in-memory database. In-memory databases are used to store state information related to the border-gateway protocol, (BGP), routing information base entries (RIB), BGP Neighbor Tables and Intermediate System-Intermediate System, (IS-IS), adjacencies, Link State Databases, Interface information and Chassis information. The object representation is done in memory using the Brick Data Store Format (BDSF). All state transactions are handled by the database in the same way as a SQL database (using, e.g. tables, objects, and attributes ).

The BDS system offers a unified memory layout which significantly reduces complexity for each application logic to serialize or de-serialize data. BDS also allows for strong abstraction of the infrastructure, which allows a suite utilities to be built around BDSF and made available to end-user applications. This allows developers to concentrate on the application logic that is built around a uniform object format and utilities.

“In certain embodiments, tables and table properties can be defined using configuration files in Java Script Object Notation, (JSON) which allows for easy specification of dynamic objects. The BDSF data representation can be uniform over inter-process communications, file and in-memory representations. This allows for easy access to information both in memory and during processing.

The BDS system defines an object table, an item container, and an attribute binary format. This uniquely represents the information within the system over inter-process communication and in-memory databases. BDS provides an uniform representation of objects within the system and allows applications to use it to understand and use that information. This greatly reduces the amount of code required to read and create information throughout the system. The object format is a binary file format that has sufficient information to allow it to be organized with object tables or databases to improve its ability to capture system state. The BDS system can be used to optimize memory layout and index map. This allows for an instance to be indexed in multiple flavors of lookup trees, each with additional information. Some embodiments allow the system state to be stored on off-board servers that have large storage capacities. This, along with the temporal ordering information, can make it possible to view and replay the system’s state at any time. The BDS system can provide object consistency across objects tables by using a modified version IS-IS routing protocol. This ensures table synchronization. Maintaining synchronization in loosely coupled systems, such as those using IS-IS routing protocols, can be difficult if you don’t provide object consistency.

“In certain embodiments, the BDS systems provides bit compression to acknowledge objects in tables, which ensures that tables are synchronized across all modules. The BDS system can be used to recover the system after a restart of a module. A queue runner eliminates the need to keep track of timer points or handlers. It is possible to easily recover from a restart using a snapshot stored onto hard disk. The BDS system can be used to indicate add/delete and delta changes in objects with plug-ins. With the help of plug ins registers, applications receive notifications about any operation that is made to the table. A diff map application may be used in some embodiments to determine the current state of the system at any given moment without over-loading the memory. The BDS system is a unique way to store indexes as well as its object map in some embodiments. One index can be used for all trees in a table. This is a good way to reduce memory footprint as each tree won’t have a different pointer to data. Separate pointers for key and trees index would also be in warm cache, which allows for faster lookups.

“C. Representations for Tables and Objects within the BDS System”

“Table Representation”

“FIG. FIG. 2 shows an example of a table within the BDS system. Particularly, FIG. FIG. 2 illustrates a table ‘bgp.neighbor. The java script object notation JSON is used to express the data. The table also includes the object type?bgp.neighborentry? There are three indices. This allows for faster lookups because the number of indices indicates how many trees are in the table. Every index includes a key. This can be an array or multiple keys. A key could include one or more keys that are associated with a tree to speed up lookup. For faster lookup, the table can have multiple trees. FIG. 2. The JSON file table can implicitly contain a sequence tree for bookkeeping in addition to the aspects shown in FIG. The sequence tree key may be a 64-bit monotonically increasing number. This sequence per table object ensures that there are no stale entries. In certain embodiments, the JSON tables can also define special properties for the table, such as Queue runner attributes and whether Diffmap is enabled or disabled. FIG. 2 shows the table. The table in FIG. 2 describes Diff map properties for a table. The table, for example, defines whether the Diffmap is enabled and specifies that each object can store only one Diffmap.

“Objects Representation”

“FIG. FIG. 3 shows an example of objects in a BDS-system. Particularly, FIG. 3 shows an example representation of the object ?bgp-neighbor-entry.? FIG. 3 shows that the BGP neighbor may include eleven attributes with different codes points. An object may contain up to 256 code points in some embodiments. The number of code points in some embodiments can be determined by the BDS format mask length. An object can be defined in JSON with all its attributes and the type of each attribute. The object definition could include either a standard C type or an object. Types such as ‘array’ are also possible. You can also include sub-types such as?array?”

“D. BDS System Memory format”

“FIG. 4. This is an example of a BDS system memory format. The BDS system distinguishes between object-map and object content as shown in FIG. 4. Map and object content can both be stored at the same location, while index can be stored at a different location. This makes it possible to reallocate the data without any interaction from an application. This is particularly useful for memory managers who need data locality, such as for e.g. Warm caches can be exploited. Some embodiments allow the object content to be stored in a serial byte string with no padding. Each object attribute can be stored in network order, one after the other. To locate an attribute, the object map is a combination or offset list and attribute mask. An example of this is an attribute code point 0. The first offset can be code point 1. And so on. Variable widths of an offset entry are possible (1 or 2 octets). This is encoded with the S bit in header. It allows for small and large offsets to been expressed. Because the system contains many small objects, only one-byte offsets are used.

The BDS system stores the memory format within an in-memory memory storage system that includes a memory coupled with a processor. In-system memory, for example, can be implemented with processor 121 and memory 122 discussed in relation to FIGS. 1A-1D. 1A-1D. The object and its map can be saved in memory using the memory format illustrated in FIG. 4. The index map of the indexes to one or more objects can also be saved in a separate location using the index map format described below.

“As shown at FIG. 4 The memory format can contain multiple fields. Below is a detailed discussion of each field.

“The ?Length? The?Length? field contains the total length of the object map, including the length field. If the memory formats need to be upgraded to support larger message sizes, the container protocol will indicate another payload format. The Length field in some embodiments can be approximately 16 bits long.

“The ?Type? An object code point can be included in the field?Type? FIG. 3 shows an example of BGP neighbor entry. 3. The object type is 100. The Type field may be approximately 16 bits in length, depending on the embodiment.

“The ?Sequence number? The field can be a monotonically growing number that represents a version the corresponding object. Each Table can have its own Sequence number space. The Sequence number may be 64 bits in length, depending on the embodiment.

“The ?Offset count? The field indicates the number of offsets within the object. The Offset count may be as long as 8 bits in some embodiments.

“The ?S? The?S? field can indicate whether the offset length is 1 byte or 2 bytes. S bit will be used if the offset size is greater than 256. The?S? can be used in some embodiments. In some embodiments, the?S? field may be 1 bit long.

“The ?U? “The?U? field indicates whether the data contents are an update. This bit will be set if the object is not deleted. The deleted object will remain in memory until it is propagated to all subscribers. It will be deleted during garbage collection (GC), or when the originator is certain that all objects are in sync. The U field may be as short as 1 bit in some embodiments.

“The ?D? The?D? field indicates whether the object map is a diffmap. Diff maps allow you to keep multiple versions of an object while only encoding their differences. The D field may be as long as 1 bit in some embodiments.

“The ?AML? The field indicates the length of an attribute mask. The AML field is the number of bytes that an attribute mask has been included in the object mapping. The AML field may be approximately 5 bits in length depending on the embodiment.

“The ?Attribute mask? The field is a bit vector that describes the encoded attributes in an object definition. A rib-entry object description may have 30+ attributes. Only a subset may be encoded depending on the context in which the object is instantiated. External BGP updates may contain different attributes than internal BGP updates. Each set bit in the Attribute mask field indicates whether the attribute that corresponds to the bit position was encoded. An example of an Attribute Mask field is the word?11000110. Bit #0, bit #1, bit #5, and bit #6 are set (starting at the left). Attribut #0 is pointed at by the first offset. Attribut #1 is pointed towards by the second offset. Attribut #5 is pointed toward by the third offset. Attribut #6 is pointed towards by the fourth offset.

“The ?Offset list? As mentioned above, the offset list field aids in pointing at the data in the object contents. The length of data content can be indicated by the offset list. The offset list may be variable in length in some cases.

“The ?Data list? The actual data content is represented by the field?Data list? The offset list may be variable in length in some embodiments.

“FIG. “FIG.5” illustrates an example Array Object format as defined by the BDS. The Array Object format includes fields like?Length? ?Type,? ?S,? ?Offset list,? ?Offset list? These fields are similar to those discussed in relation to FIG. 4. The Array Object format also contains an?Element? field. The Array Object Format also includes an?Element? field that specifies the number and type of elements in the array. Some embodiments allow for a fixed number of elements, while others allow for variable elements.

“E. Tables and Index Mapping.”

“FIG. “FIG.6” shows an example of a table in a BDS system. In the same format as FIG., the table can also be stored at another location. 6. The table representation also includes root fields like?Sequence root? field, and a ‘Root 1? field, a ‘Root 1? field, and an?Root2? field. Each of the root fields may be used to represent a search tree. For faster search, each table can have multiple trees. Each tree may include a composite key that supports multiple attributes. The BDS system implicitly creates a sequence tree when a table is created. In JSON file, the table representation might have required two tables to be created. However, the BDS system will create three trees internally. A monotonically increasing sequence number can be the key to sequence tree.

“FIG. “FIG. 6. Every tree in the table has an index map as its node. An index map is a way to organize information efficiently in memory. It also allows multiple keys for quick lookup operations. This format allows for an index map to be attached and retained in an object map. The index can be built separate from the underlying data to allow for batched inserts during warm CPU cache. This makes it more efficient and performance-efficient. Information is stored in hierarchies in a memory layout. Warm cache refers to the characteristic which leverages locality to reference information to quickly perform a specific search. A table format stores at most one node, including an index map.

An index map is a way to ensure that objects can be quickly found in the table. It also provides a pointer for the object map. An index map can also include a key and a list of node offset lists for each tree or node in a table. FIG. 6 shows an example of such an index map. FIG. 6 shows key and node offsets for two trees,?Root 1? ?Root 1? und?Root2? FIG. 6. A?key offset? The field contains the offset in key’s object map. It could be a single key, or an array of keys for composite keys. The?Node offset? The?Node offset? field contains an index map offset for a node in a tree. If root node-0 are radix trees, then they would have their own book keeping structure. This would be stored in the index map with its offset. Each node of the tree points to the next index map. The radix node’s left and right, for example, will point to the next index map. In some cases, all nodes in an index map are located on the same memory page. This arrangement allows for faster lookups and ensures that all indexes are stored in the warm cache. The key can be separated from the data to allow it to be indexed separately.

“FIG. “FIG.8” illustrates an example of an index map that points to another index map within a BDS system. An index map can contain a next pointer, which points to the next index map that will hold diff map as an object. If there is a diffmap, the next pointer will be set. Otherwise it will be set to NULL. As discussed above, an index map can point to another map for tree traversal. The index map may have tree nodes that point to the next index map for tree navigation.

“In certain embodiments, entries may be entered into a table like the one in FIG. 6. An object-update method, in particular, can create or update an object that represents the table. The sequence attribute?S will be automatically generated by the BDS system. The BDS system will automatically generate the sequence attribute?S? The transaction-number of a table. Each transaction that adds/changes/deletes an object will alter its sequence number. This allows two components to quickly identify if they are using the same version of an object. Some embodiments allow the sequence number to be a 64-bit entity that monotonically increases in size. This can be enough to avoid sequence-number wrappings. If wraps occur due to, for instance, a faulty component then all components with a replica the respective table must be restarted using sequence number 1. This is similar to Link State routing protocols for approaching end-of sequence space.

“F. BDS System Utilities.”

The BDS system offers a range of utilities to manage the BDSF tables, objects, and attributes mentioned above. The BDS system utilities are able to manage multiple versions of an object using differential encoding. This allows for smaller footprints known as diff maps. They can also manage snapshot views of tables and provide a queue runner to quickly compute the processing workload. They can also provide notifications via plugins for table updates/deletes, and can implement table synchronization protocols. The BDS system offers several utilities, including Diff map and Queue runner, Table plugs, and Table sync protocols. Each one is described in detail below.

“Diff-Map Utility”

Diff-maps allow incremental updates to objects in the BDS database to be handled without increasing memory footprint. Diff-maps allow you to take a snapshot of objects (e.g. a table) at different times. Diff-maps are able to keep a snapshot and enable tracking and debugging of specific tables’ state. A diff-map may be a Last in First Out (LIFO), view of an object. This is where a new object has been added at the beginning. The linked list of diff maps each represents a change to the object. The diff map associated to an object map may be stored in a memory address that is not associated with the object map, object or index maps.

“FIGS. FIGS. 9-13 show various examples of object maps, indexmaps, and diff-maps used in the BDS system. Particularly, FIG. FIG. 9 shows the base object map with its corresponding index map; FIG. FIG. 10 shows an object map that has changed attributes and the corresponding index map. It also includes the diff-map and its corresponding diffmap index map. FIG. 11 shows an object map that has a new entry, corresponding index map, and the resulting diffmap and diff map index maps. FIG. 12 shows a snapshot showing changes to an objectmap with diff-maps, corresponding index maps representing each of the change. FIG. 13 shows an example flow diagram to be used when generating an object from diffmaps.

“As stated above, FIG. FIG. 9 shows the base object map 902 as well as the corresponding index maps 904. The based map 902 is a table with two trees, a sequence (10) and an attribute mask (?10011011?). Read from left to right, an offset list and attribute data. All attributes have a fixed length of 4 bytes. Attribut 1 and 4 respectively are keys to tree 1 or tree 2. Many fields on the index map and object map are not shown for simplicity.

“FIG. FIG. 10 shows an object map that has a changed attribute and the corresponding indexmap, as well as the diff-map and its corresponding map. Particularly, FIG. FIG. 10 illustrates changes to an objectmap, such as the one shown in FIG. 9 where changes are made to attributes 2, 5, 8, and 8. Keys remain the same. The object map 1002 is displayed with the corresponding index map 1004. FIG. FIG. 10 also shows the diff-map 1006 as well as the corresponding diff-map index map 1008.”

“The sequence number of an object map changes from 10 to 21 when there is a change in its attributes (shown in FIG. 9 to 21. Only the modified attribute of an attribute is included in the diff-map 1006 when it is changed. If a complete object is required (e.g. 902 in FIG. If a complete object (e.g., 902 in FIG. 9) is required, you can obtain the object by collapsing diff-map 1006 and the latest object map 1002.

“FIG. “FIG. Particularly, the objectmap 1002 has a new attribute in relation to the base objectmap 902 as shown in FIG. 9. The addition of a “1” to the attribute mask represents the new attribute. The new attribute is represented by the addition of a?1? The attribute can also be added to the attribute, resulting in a new?Att9? The new attribute also results in a new?Att 9?. The diff-map 1106 results in a??1? The corresponding new attribute must be ignored or removed when collapsing diff-map 1106 with the object map 1102 in order to get the original object map 902.

“FIG. “FIG. Particularly, FIG. FIG. 12 shows an objectmap 1202 (with sequence number 21), and the corresponding Index map 1204, which represent the most recent state of the objectmap. The Diff-map 1206, and the corresponding Index Map 1208, represent the previous instance, while the diffmap 1210 and the corresponding Index Map 1212 represent the oldest instance. The snapshot can preserve previous state of the system and maintain a temporal order among snapshot instances. Some embodiments allow for unlimited state numbers. Some embodiments allow for unlimited number of states, as memory space may be limited. In these cases, certain snapshots could be stored in higher-tier storage media (e.g. SDD/HDD storage). FIG. FIG. 13 shows a flow diagram for an example of a process to regenerate an object using diff-maps.

“Diff-Maps and Trees.”

“FIG. “FIG. 14” illustrates an example of a changed object map and its resulting diff-map in relation sequence, prefix and AS-path trees within a BDS system. Diff-maps are a part sequence tree, and can be used for trees where a key has been changed, even after an object is added to a tableau. FIG. 14 shows an example. 14 shows how an AS-path key can be changed along with other attributes. If the object sequence number 10 was used, and the new number 21 is used, the trees will be attached to a single map with the diff map. Only the sequence tree, the AS-path tree, and the old sequence number will point to the diff-map. This allows for faster search of diff-map objects. The prefix tree will only have one instance of the object map and index attached to it. This tree’s diff-map can only be accessed via index map next pointer.

“Queue Runner”

Click here to view the patent on Google Patents.