2013-06-19 3 views
1

Я использую MySql и Nodejs. Мне нужно хранить огромную строку, состоящую только из 0 и 1. (Это отображение координатной сетки 0 = может двигаться, 1 = не может двигаться.).Магазин серии 0s и 1s в базе данных MySQL

Ex: 00000000000000000000000000000000000010000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000010000000000 ...

Должен ли я принимать эту строку, кодировать его в строку base64 и сохранить его сюда? Тогда, когда мне это нужно, я его расшифрую? Если да, то как мне это сделать, используя Nodejs/Javascript?

Thanks

ответ

1

данных, которые вы хранения, кажется, легко сжать, почему бы вам не использовать встроенный в MySql COMPRESS функция

Сырье:

mysql> select length('00000000000000000000000000000000000010000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000010000000000');                                                
332 

компрессной

mysql> select length(compress('00000000000000000000000000000000000010000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000010000000000'));                                                              
23 
+0

Работа. Благодарю. Моя 9216 длинная строка стала только 629 длинной сжимаемой. : D – sam

0

Не храните строку, храните двоичную информацию.

Вот пример способа преобразования этих данных в двоичный файл. Надеемся, вы сможете переоформить вещи, чтобы ваши картографические данные никогда не представлялись в виде строки в первую очередь.

 static void Main(string[] args) 
    { 
     const string data = 
      "00000000000000000000000000000000000010000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000010000000000"; 

     var arrayLength = data.Length/8; 
     if (data.Length%8 != 0) 
      arrayLength++; 
     var binaryData = new byte[arrayLength]; 

     byte nextByte=0; 
     var k = -1; 
     for (var i = 0; i < data.Length; i++) 
     { 
      var j = i%8; 
      if (j == 0) 
      { 
       binaryData[++k] = nextByte; 
       nextByte = 0; 
      } 

      var bit = int.Parse(data[i].ToString()); 
      if(bit==1) 
       nextByte |= (byte)(bit << j); 
     } 
     binaryData[k] = nextByte; 
    } 
+0

Проблема в том, что максимальная длина BINARY такая же, как VARCHAR, которая слишком мала для моих карт. – sam

+0

Ни в коем случае. Вы можете хранить в 8 раз больше. «1» принимает 8 байтов, когда требуется только 1 бит. 64 ваших символов принимает 512 байт, но может быть представлен в 8 байтах. например, 1010001111000000101000000000000000000000000000000000000000000000000000000 может быть представлено числом 0xA3C0A00000000000 –

+0

Если вы не храните эти данные в виде строки, вам никогда не приходилось ее преобразовывать. –

Смежные вопросы