[
https://issues.apache.org/jira/browse/GEODE-9347?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Donal Evans updated GEODE-9347:
-------------------------------
Description:
our current implementation of Publish and Subscribe use a list of Subscription
objects to maintain state.
@doevans noticed that native redis is using 2 maps to maintain state
in an effort to mimic native redis data structures and hopefully improve
performance, our publish and subscribe commands should also use maps 1)
(channel -> all subscribers). 2) subsrciber(client) -> all subscribed channels
Updated 08/20/2021:
Redis handles subscriptions as follows:
* Each client object maintains a set of channels to which it is subscribed
* Each client object maintains a list of patterns to which it is subscribed
* The server maintains a map of channels -> subscribed clients
* The server maintains a list of all Pattern objects
* Each Pattern object knows which client is subscribed to it and the byte[]
pattern associated with it
On subscribe:
* Add the channel to the client's set of subscribed clients
* Add the channel to the server's map of channels -> subscribed clients
* Respond with the total number of subscribed channels and patterns for the
client (sum the sizes of the client's channel set and pattern list)
On psubscribe:
* Add the byte[] pattern to the client's list of patterns
* Create a Pattern object and add it to the server's list of Patterns
* Respond with the total number of subscribed channels and patterns for the
client (sum the sizes of the client's channel set and pattern list)
On publish:
* Notify all clients subscribed to the channel using the server's channels ->
subscribed clients map
* Notify all clients subscribed to matching channels by comparing the channel
to the server's list of all patterns using Glob-style matching
* Respond with the number of notifications sent
For our implementation, a similar approach can be used, but this will entail
significant refactoring of PubSub classes
was:
our current implementation of Publish and Subscribe use a list of Subscription
objects to maintain state.
@doevans noticed that native redis is using 2 maps to maintain state
in an effort to mimic native redis data structures and hopefully improve
performance, our publish and subscribe commands should also use maps 1)
(channel -> all subscribers). 2) subsrciber(client) -> all subscribed channels
> Make Publish and Subscribe use Map data structures
> --------------------------------------------------
>
> Key: GEODE-9347
> URL: https://issues.apache.org/jira/browse/GEODE-9347
> Project: Geode
> Issue Type: Improvement
> Components: redis
> Reporter: John Hutchison
> Priority: Major
>
> our current implementation of Publish and Subscribe use a list of
> Subscription objects to maintain state.
> @doevans noticed that native redis is using 2 maps to maintain state
> in an effort to mimic native redis data structures and hopefully improve
> performance, our publish and subscribe commands should also use maps 1)
> (channel -> all subscribers). 2) subsrciber(client) -> all subscribed channels
> Updated 08/20/2021:
> Redis handles subscriptions as follows:
> * Each client object maintains a set of channels to which it is subscribed
> * Each client object maintains a list of patterns to which it is subscribed
> * The server maintains a map of channels -> subscribed clients
> * The server maintains a list of all Pattern objects
> * Each Pattern object knows which client is subscribed to it and the byte[]
> pattern associated with it
> On subscribe:
> * Add the channel to the client's set of subscribed clients
> * Add the channel to the server's map of channels -> subscribed clients
> * Respond with the total number of subscribed channels and patterns for the
> client (sum the sizes of the client's channel set and pattern list)
> On psubscribe:
> * Add the byte[] pattern to the client's list of patterns
> * Create a Pattern object and add it to the server's list of Patterns
> * Respond with the total number of subscribed channels and patterns for the
> client (sum the sizes of the client's channel set and pattern list)
> On publish:
> * Notify all clients subscribed to the channel using the server's channels ->
> subscribed clients map
> * Notify all clients subscribed to matching channels by comparing the channel
> to the server's list of all patterns using Glob-style matching
> * Respond with the number of notifications sent
> For our implementation, a similar approach can be used, but this will entail
> significant refactoring of PubSub classes
--
This message was sent by Atlassian Jira
(v8.3.4#803005)