2015-04-05 56 views
3

我正在創建一個redis(鍵值)數據庫,並且我希望能夠輕鬆地更改表示數據應該如何存儲的圖表。 包含在這個圖表中我希望能夠區分保存爲JSON字符串的數據,以及實際上是哈希表或者集合或有序集合的數據。我試圖在Excel中寫一些東西,但它太像一個關係數據庫,我試圖用JSON寫它,但很難說什麼是JSON字符串的值,哪些是哈希值。繪製redis(鍵值)數據結構的標準方式是什麼?

有沒有關於如何繪製此圖的行業標準?

編輯: 我結束了自己的語法,但仍然想知道這個答案。

+1

請分享你的語法! – Andrew 2015-08-14 16:57:21

+0

@Andrew發表。希望能幫助到你。 – Avik 2015-08-16 15:19:17

回答

1

這是我爲自己創建的語法:(這裏是一個紙牌遊戲的樣本Redis的結構,我會做:http://pastebin.com/4aRye4HQ

key: = string 
#key: = hash 
$key: = set 
$$key: = sortedSet 

這是崇高的語法高亮文件我用顏色代碼的語法(保存爲redis.YAML-tmLanguage):

# [PackageDev] target_format: plist, ext: tmLanguage 
--- 
name: Redis 
scopeName: source.redis 
fileTypes: [] 
uuid: 0033bdf9-cd9f-4147-bd2e-a9fed3d07e1e 

patterns: 
- include: '#erb' 
- match: \#[A-Za-z][A-Za-z0-9_]+ 
    name: variable.parameter 
    comment: Hashes 
- match: \$[A-Za-z][A-Za-z0-9_]+ 
    name: support.constant 
    comment: Sets 
- match: \$\$[A-Za-z][A-Za-z0-9_]+ 
    name: entity.name.class 
    comment: Sets 
- match: \d+ 
    name: constant.numeric 
    comment: Numbers 


- name: constant.numeric.yaml 
    match: (?:(?:(-\s*)?(\w+\s*(:)))|(-))\s*((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f)?\s*$ 
    captures: 
    '1': {name: punctuation.definition.entry.yaml} 
    '2': {name: entity.name.tag.yaml} 
    '3': {name: punctuation.separator.key-value.yaml} 
    '4': {name: punctuation.definition.entry.yaml} 

- name: string.unquoted.yaml 
    match: (?:(?:(-\s*)?(\w+\s*(:)))|(-))\s*(?:((")[^"]*("))|((')[^']*('))|([^,{}&#\[\]]+))\s* 
    captures: 
    '1': {name: punctuation.definition.entry.yaml} 
    '2': {name: entity.name.tag.yaml} 
    '3': {name: punctuation.separator.key-value.yaml} 
    '4': {name: punctuation.definition.entry.yaml} 
    '5': {name: string.quoted.double.yaml} 
    '6': {name: punctuation.definition.string.begin.yaml} 
    '7': {name: punctuation.definition.string.end.yaml} 
    '8': {name: string.quoted.single.yaml} 
    '9': {name: punctuation.definition.string.begin.yaml} 
    '10': {name: punctuation.definition.string.end.yaml} 
    '11': {name: string.unquoted.yaml} 

- name: constant.other.date.yaml 
    match: (?:(?:(-\s*)?(\w+\s*(:)))|(-))\s*([0-9]{4}-[0-9]{2}-[0-9]{2})\s*$ 
    captures: 
    '1': {name: punctuation.definition.entry.yaml} 
    '2': {name: entity.name.tag.yaml} 
    '3': {name: punctuation.separator.key-value.yaml} 
    '4': {name: punctuation.definition.entry.yaml} 
- include: '#value' 

repository: 
    array: 
    name: meta.structure.array.json 
    begin: \[ 
    beginCaptures: 
     '0': {name: punctuation.definition.array.begin.json} 
    end: \] 
    endCaptures: 
     '0': {name: punctuation.definition.array.end.json} 
    patterns: 
    - include: '#value' 
    - name: punctuation.separator.array.json 
     match: ',' 
    - name: invalid.illegal.expected-array-separator.json 
     match: '[^\s\]]' 

    comments: 
    patterns: 
    - name: comment.block.documentation.json 
     begin: /\*\* 
     end: \*/ 
     captures: 
     '0': {name: punctuation.definition.comment.json} 
    - name: comment.block.json 
     begin: /\* 
     end: \*/ 
     captures: 
     '0': {name: punctuation.definition.comment.json} 
    - name: comment.line.double-slash.js 
     match: (//).*$\n? 
     captures: 
     '1': {name: punctuation.definition.comment.json} 

    constant: 
    name: constant.language.json 
    match: \b(?:true|false|null)\b 

    number: 
    comment: handles integer and decimal numbers 
    name: constant.numeric.json 
    match: "(?x:   # turn on extended mode\n\t\t\t    -?   #\ 
     \ an optional minus\n\t\t\t    (?:\n\t\t\t    0  #\ 
     \ a zero\n\t\t\t    |  # ...or...\n\t\t\t    [1-9]\ 
     \ # a 1-9 character\n\t\t\t    \\d*  # followed by zero or\ 
     \ more digits\n\t\t\t   )\n\t\t\t    (?:\n\t\t\t  \ 
     \  (?:\n\t\t\t     \\.  # a period\n\t\t\t    \ 
     \ \\d+ # followed by one or more digits\n\t\t\t    )?\n\t\t\ 
     \t    (?:\n\t\t\t     [eE] # an e character\n\t\t\t\ 
     \     [+-]? # followed by an option +/-\n\t\t\t    \ 
     \ \\d+ # followed by one or more digits\n\t\t\t    )?  #\ 
     \ make exponent optional\n\t\t\t   )?   # make decimal portion\ 
     \ optional\n\t\t\t   )" 

    object: 
    comment: a JSON object 
    name: meta.structure.dictionary.json 
    begin: \{ 
    beginCaptures: 
     '0': {name: punctuation.definition.dictionary.begin.json} 
    end: \} 
    endCaptures: 
     '0': {name: punctuation.definition.dictionary.end.json} 
    patterns: 
    - comment: the JSON object key 
     include: '#string' 
    - include: '#comments' 
    - name: meta.structure.dictionary.value.json 
     begin: ':' 
     beginCaptures: 
     '0': {name: punctuation.separator.dictionary.key-value.json} 
     end: (,)|(?=\}) 
     endCaptures: 
     '1': {name: punctuation.separator.dictionary.pair.json} 
     patterns: 
     - comment: the JSON object value 
     include: '#value' 
     - name: invalid.illegal.expected-dictionary-separator.json 
     match: '[^\s,]' 
    - name: invalid.illegal.expected-dictionary-separator.json 
     match: '[^\s\}]' 

    string: 
    name: string.quoted.double.json 
    begin: '"' 
    beginCaptures: 
     '0': {name: punctuation.definition.string.begin.json} 
    end: '"' 
    endCaptures: 
     '0': {name: punctuation.definition.string.end.json} 
    patterns: 
    - name: constant.character.escape.json 
     match: |- 
     (?x:    # turn on extended mode 
          \\    # a literal backslash 
          (?:    # ...followed by... 
           ["\\/bfnrt]  # one of these characters 
           |    # ...or... 
           u    # a u 
           [0-9a-fA-F]{4} # and four hex digits 
          ) 
          ) 
    - name: invalid.illegal.unrecognized-string-escape.json 
     match: \\. 

    value: 
    comment: "the 'value' diagram at http://json.org" 
    patterns: 
    - include: '#constant' 
    - include: '#number' 
    - include: '#string' 
    - include: '#array' 
    - include: '#object' 
    - include: '#comments' 
foldingStartMarker: |- 
    (?x:  # turn on extended mode 
          ^  # a line beginning with 
          \s*  # some optional space 
          [{\[] # the start of an object or array 
          (?!  # but not followed by 
           .*  # whatever 
           [}\]] # and the close of an object or array 
           ,?  # an optional comma 
           \s* # some optional space 
           $  # at the end of the line 
          ) 
          |  # ...or... 
          [{\[] # the start of an object or array 
          \s*  # some optional space 
          $  # at the end of the line 
         ) 
foldingStopMarker: |- 
    (?x:  # turn on extended mode 
         ^ # a line beginning with 
          \s* # some optional space 
          [}\]] # and the close of an object or array 
         ) 
keyEquivalent: ^~J 

... 
相關問題