## 4 Classification Based on Taxonomy and Design Drivers
### Load Balancing  
In DLB [23], Section 3.4, to balance the load among sensors in a grid, a scheme named the 'cover-up' scheme is used. According to this scheme every node of a grid has storage threshold levels. For instance, a sensor node has two threshold levels, e.g., 1\({}^{\text{st}}\) level = 30 and 2\({}^{\text{nd}}\) level = 60. A grid point forwards packets to the closest grid node for storage. When the node closest to the grid point reaches the first threshold level it modifies its virtual co-ordinate to (\(\infty\), \(\infty\)) in order to hide its original location. Hence, the geographic routing protocol forwarding event data to a storage node will ignore the original closest node and find a new node that is the next closest node to the grid point. This process continues until all nodes reach their first threshold level. The last node, farthest from the center, reaching this threshold broadcasts that the first threshold has been reached and the second threshold storage level is established. However, following this mechanism, at some point,all of the nodes within a grid could become saturated. If this occurs, the paper proposes an extended grid that uses adjacent grids to the saturated one to select a new home node. The authors introduce two types of load balancing schemes in SDS [19]: (1) storage load balancing and (2) routing load balancing. In storage load balancing, the storage load is balanced among different zones. Every zone maintains a threshold, denoted by \(\varphi\), of the percentage of a zone's used storage to indicate when a zone is at risk of being overloaded. When a zone's storage crosses \(\varphi\), it starts forwarding all storage requests to a lightly loaded neighbor zone. Every zone calculates its storage status \(\sum\limits_{i=1}^{N}S_{i}\) / \(N\) and forwards this status to its neighbor zones periodically. In routing load balancing instead of routing packets using one specific route, SDS calculates more than one shortest route between a source or relay and destination. This reduces congestion in any specific route. The calculated shortest path between \(H_{a}\) (\(X_{a}\), \(Y_{a}\)) and \(H_{b}\) (\(X_{b}\), \(Y_{b}\)), as shown in Figure 7, is not unique. For simplification let us consider \(|X_{a}-X_{b}|=|Y_{a}-Y_{b}|\) and then the maximum number of inflexion points in the horizontal and vertical routing process is \(C=|X_{a}-X_{b}|\). The number of choices in choosing \(j\) inflexion points among C is \( \begin{pmatrix}c-1\\ c-k\end{pmatrix} \), which is equivalent to the problem of putting \(C\) ball into \(j\) boxes. There are \(2^{j}\) possible routes for each choice with \(j\) inflexion points, hence the maximum number of possible shortest routes between \(H_{a}\) and \(H_{b}\) is \(\sum\limits_{j=1}^{c} \begin{pmatrix}c-1\\ c-k\end{pmatrix} \). \(2^{j}\). When two nodes frequently communicate to each other, each query issuer randomly chooses one at each time from the list of all the shortest paths calculated. In HVGR [33], Section 3.12, for balancing the load among sensor nodes, the name based routing approach is modified. During the landmark selection, the network is divided unevenly. For example, an event \(E\) has a probability \(1/m_{I}\) of being assigned to the first level landmarks (\(L_{I}\), \(L_{2}\),...). If the network is divided unevenly (\(L_{I}>L_{2}\)), \(L_{2}\) is more likely to be overloaded earlier than \(L_{I}\). Hence the load is balanced by assigning a task to regions in proportion to the region size. An event is stored in a node in \(L_{k}\)'\(s\) first level region if:  
\[\frac{1}{N}\sum\limits_{i=1}^{k-1}N_{{}_{i}}\leq H_{{}_{1}}(E)\leq\frac{1}{N} \sum\limits_{i=1}^{k}N_{{}_{i}} \tag{14}\]  
Here, \(N_{i}\) is the number of nodes in landmark \(L_{i}\)'\(s\) first level region and \(N=\sum\limits_{i=1}^{m}N_{{}_{i}}\). In LB-DCS [24], for handling load balancing across a dynamic network, the hash function includes a network density estimation \(f\).